中国开发网: 论坛: 程序员情感CBD: 贴子 479175
李战
可能我没有说清楚,我是想说
下面的代码会导致内存泄露:
class TMyObject
{
private:
TOtherObject * OtherObject;
public:
TMyObject()
{
OtherObject = new TOtherObject;

...... //这里的代码发生异常将导致OtherObject不会被释放!

}
~TMyObject()
{
......

delete OtherObject; //构造函数发生异常时析构函数根本不会被调用,此代码也不会被执行!
}
}


而应该把构造函数写成:
TMyObject()
{
OtherObject = new TOtherObject;
try
{
...... //这里的代码发生异常。
}
catch(...)
{
delete OtherObject; //确保发生异常时,能释放掉已建立的东西。
throw; //再次抛出异常给上层调用代码处理。
};
}

  如果,一个构造函数要创建很多其他东西的话,就应该编写相应的try try try ... catch catch catch形式的嵌套代码(或者相同逻辑的代码)来确保构造函数的正确性。

想请各位看看这样说是否有问题。
俺正在写一篇关于构造析构的小文章,但多年没用C++了,怕写错了。哈哈
李战(leadzen)

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录