More Effective C++之10

来源:互联网 发布:淘宝名称优化 编辑:程序博客网 时间:2024/05/29 03:18
条款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函数。