[阅读: 432] 2007-03-04 01:16:38
下面的代码会导致内存泄露:
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)