条款10:在constructors内阻止资源泄漏(resource leak)
这里需要一个前提:
char* ptr = NULL;
delete ptr;
上面的代码是安全的,即删除一个NULL指针是无害的。
抛弃条款中原来鼓吹auto_ptr的内容,我们只涉及普通指针。那么,这么做:
class MyTest
{
public:
MyTest():m_aPtr(0),m_bPtr(0)
{
try
{
m_aPtr = new A;
m_bPtr = new B;
}
catch (...)
{
CleanUp();
throw;
}
}
~MyTest(){CleanUp();}
private:
void CleanUp()
{
delete m_aPtr;
delete m_bPtr;
}
A* m_aPtr;
B* m_bPtr;
};
关于const成员指针,只能在成员列表中初始化,那么定义一个init函数,将可能出现异常的东西放在这里面,然后在初始化列表外调用init函数。