c++的动态空间

来源:百度知道 编辑:UC知道 时间:2024/05/24 12:50:23
int *p;
p1=new int;
delete p1;
请问:new申请一个整型的变量是不是,而用delete p1是不是把那个整型的变量释放掉?也就是说new会申请一个变量?

是 是 是
malloc 和 free是单纯的分配、释放内存

new 和 delete 不但分配、释放内存, 还会做好申请来的东西的构造和析构。 所以new 和delete已经不仅是处理内存分配的问题了, 它们是全面处理对象的生死

new申请的不是变量,是存储这个整型变量的内存,delete p1是把new申请的内存释放,等于是new向系统借了内存,delete p1把借来的内存还给系统

new 不是申请的变量,而是申请的内存。你这个地方时申请了一个能够存储int型值大小的内存。delete的时候是将这块内存释放。

new 是向堆区申请一块内存,大小由系统默认的整形大小决定,内存申请成功后编译器返回申请到的内存地址并由一个指针变量 p1 接收,失败则返回空值.
使用new申请的内存并不会被自动释放,如果指针变量离开指针作用域时,该内存块不会被自动归还给堆。相反,该内存块被视为已经分配出去,同时由于该指针不可再用,你将无法再访问该内存块,这称被为内存泄漏。
所以需要使用 delete p1 是释放已申请的内存资源,这样系统就能够重新分配使用该内存块。
delete p1 只是释放了内存,并没有删除指针。离开作用域前指针p1仍然存在,并可能仍指向先前的内存块,这时候如果你不注意重新使用就它就可能造成异常,因为系统可能已经给刚回收的内存分配了数据了。好的习惯是delete p1后还应该把 p1 = 0.以免造成野指针。