关于内存回收和泄漏的问题

yixuan178 2009-07-17 06:33:34
我的问题是这样的,如果我的程序在new的时候崩溃了,那么这块内存会被系统回收吗?
什么样的情况不会被系统回收,什么情况有可能被回收。
多谢!
...全文
58 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengsf 2009-07-17
  • 打赏
  • 举报
回复
这不关操作系统的事,是C++本身的规定:会释放分配的内存。

楼主可以试试以下代码看结果。

#include <iostream>
#include <cstdlib>

using namespace std;

void* operator new(size_t s){
cout << "in my new" << endl;
return malloc(s);
}

void operator delete(void *p){
cout << "in my delete" << endl;
free(p);
}


class A{
public:
A(){
cout << "A" << endl;
throw 0;
}
};

int main(){
try{
A *pa = new A();
}catch(...){
cout << "抛出异常了" << endl;
}

system("pause");
return 0;
}


还要注意,
因为构造函数未执行完,
所以不会调用其析构函数,
所以如果构造函数中又分配了内存,
需要自己保证这些内存的释放。

还有就是(用上面例子):
如果类A包含其它成员,
又或是继承了其它类,
因为调用 A 的构造函数时,
基类、成员的构造函数已经调用完毕(具体可参考C++相关资料),
所以成员、基类的析构函数会被调用。

类似,如果在调用该实例的构造函数前,
基类或成员的构造函数中已经出现异常,
则对于已构造的部分,会调用其析构函数,未构造或构造中的则忽略。




lylscut 2009-07-17
  • 打赏
  • 举报
回复
jf
疾似云流 2009-07-17
  • 打赏
  • 举报
回复
建议巩固一下操作系统的知识。
stevensun724 2009-07-17
  • 打赏
  • 举报
回复
顶,学习了
lzy0001sl 2009-07-17
  • 打赏
  • 举报
回复
对于C/C++,程序运行过程中是不可以回收的。所以如果程序有内存泄漏,长时间运行的过程中,将吃掉操作系统的所有内存,导致系统崩溃。但是一旦程序正常关闭,已经泄漏的内存将被回收。 Windows下是这样的。

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧