程序关闭困难,析构函数执行不到的原因。
2010-08-24 15:35
267 查看
class A
{
A();
~A();
char * m_pChar;
};
class Sum
{
Sum();
~Sum();
A *m_pA;
};
Sum::~Sum()
{
m_pA=new A();
}
Sum::~Sum()
{
delete m_pA;
}
A::A()
{
int iCount=3;
m_pChar=new char[iCount];
}
A::~A()
{
delete []m_pChar;
m_pChar=NULL;
}
析构函数为什么执行不到。 类A包含在Sum类中,在Sum类中没有释放A的话,类A对象的析构函数是无法执行到的。也许你在类A里面要释放这个释放那个的,
结果由于在本身在类Sum中new的对象一直没有释放,所以最后什么也没释放。如果类Sum是主类的话,而且又在类A或者更多没有释放的类中new了太多的内存,
将会导致程序在关闭的时候,CPU暴涨。窗口关闭了,CPU却一直忙着收拾烂摊子,清理那堆上的内存。
执行的顺序是先执行~Sum(),再执行~A().
所以在主类中程序结束时,没有释放其他类的对象又没有析构函数的程序是可怕的。
{
A();
~A();
char * m_pChar;
};
class Sum
{
Sum();
~Sum();
A *m_pA;
};
Sum::~Sum()
{
m_pA=new A();
}
Sum::~Sum()
{
delete m_pA;
}
A::A()
{
int iCount=3;
m_pChar=new char[iCount];
}
A::~A()
{
delete []m_pChar;
m_pChar=NULL;
}
析构函数为什么执行不到。 类A包含在Sum类中,在Sum类中没有释放A的话,类A对象的析构函数是无法执行到的。也许你在类A里面要释放这个释放那个的,
结果由于在本身在类Sum中new的对象一直没有释放,所以最后什么也没释放。如果类Sum是主类的话,而且又在类A或者更多没有释放的类中new了太多的内存,
将会导致程序在关闭的时候,CPU暴涨。窗口关闭了,CPU却一直忙着收拾烂摊子,清理那堆上的内存。
执行的顺序是先执行~Sum(),再执行~A().
所以在主类中程序结束时,没有释放其他类的对象又没有析构函数的程序是可怕的。
相关文章推荐
- windows server 关闭事件跟踪程序 即每次都得输入关机原因
- c++程序执行时候,有的语句根本不执行的原因
- Linux前台的程序转到后台执行(关闭终端而不杀死命令)
- 关闭页面时window.location事件未执行的原因分析及解决方案
- 解决oracle12c安装报“[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置)”方法
- 让java程序在后台一直执行(例如putty关闭后后台程序继续运行)
- 程序退出时意外终止和程序不能关掉(必须通过任务管理器关闭)的原因
- 运行C#编译出来的命令行程序出现“系统无法执行指定的程序。”的原因及解决方案
- C语言中system()执行cmd命令打开关闭程序的方法
- mybatis执行查询语句,可以在plsql中查询数据,但是在程序中查询不到
- 面向对象程序执行慢的原因
- 解决oracle12c安装报“[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置)”方法
- 安全模式或开发者模式动画程序关闭动画时长缩放,动画最好不要执行
- 让java程序在后台一直执行(例如putty关闭后后台程序继续运行)
- 关闭页面,window.onunload事件未执行的原因
- linux下 c中怎么让才能安全关闭线程 和 linux线程退出时执行的程序(线程清理处理程序)简单例子
- PHP程序,关闭浏览器,程序继续后台执行
- 调用AsyncTask的excute方法不能立即执行程序的原因分析及改善方案
- 一个正执行的程序如何启动另一新程序并关闭现执行程序
- Linux前台的程序转到后台执行(关闭终端而不杀死命令)