返回信息流在学习中遇到了一个问题,希望大家做指点,万般感谢!
```cpp
#include <iostream>
using namespace std;
class A {
public:
~A() {
cout << "destructor" << endl;
}
};
int main() {
A *p = new A[2];
A *p2 = new A;
A a;
delete [] p;
return 0;
}
```
如上程序中,因为指针p2指向的动态内存没有被释放,所以在程序结束时,p2指向对象的生命周期未结束,析构函数没有在此时被调用。而在程序结束后,操作系统会检查内存泄漏的问题,将p2指针指向的内存空间回收。不知道我理解的是否有误,请大佬指点!
这是一条镜像帖。来源:北邮人论坛 / cpp / #102858同步于 2023/8/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【问题】析构函数的调用
pvcottage
2023/8/21镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
【 在 specops 的大作中提到: 】
: 没问题,操作系统分配的资源操作系统会兜底回收,但如果p2持有一个分布式资源那就真的泄漏了
好嘞,谢谢!!!
你想多了。操作系统创建进程的时候,会把大块大块的内存映射到进程的地址空间里。进程里用new、malloc之类的东西分配内存,本质上只是把操作系统给它的大块大块的内存细分,分出一小块然后返回给调用者。操作系统并不管new、malloc怎么做,也不知道什么叫内存泄漏。
当进程退出的时候,操作系统不会帮你检查内存泄漏。它只会暴力地把所有已经做好的内存映射全部撤销,以便将来给别的进程使用,或者当缓存。所以,操作系统做的不是“帮你找到那个p2指向的空间,然后回收它”,而是更像“导弹飞到了目标后爆炸,整个控制芯片被炸得稀巴烂”这种的回收。