More Effective C++(2)

来源:互联网 发布:西安软件行业优惠 编辑:程序博客网 时间:2024/04/30 12:32

class Base{public:Base(object* pValue){try{//TODO    }catch(exception){                m_pValue.release();    }   }~Base();      private:   shared_ptr<object> m_pValue;};

在ctor中抛异常的时候例如 

</pre><span style="font-size:18px"></span><p></p><p><span style="font-size:18px"> 这里使用了ctor中的exception</span></p><p><span style="font-size:18px"></span></p><p><span style="font-size:18px"> 这里值得注意是在ctor中如果抛出异常话,那么就不会调用dctor,那么就需要在异常里面直接对所建的对象进行析构,  这里不该称之为是对象因为一个完整的对象没有构建完,所以只能算是半个对象,那么析构掉它;</span></p><p><span style="font-size:18px"></span></p><p><span style="font-size:18px"></span></p><p><span style="font-size:18px">  如果在dctor中使用exception的话例子如下</span></p><p><span style="font-size:18px"></span></p><pre name="code" class="cpp"><pre name="code" class="cpp">template<typename M> class Base{public:Base(){};~Base(){try{logCreateBase()}catch(){}}      void logCreateBase();private: shared_ptr<M> p_mVlaue;};




 其实这里的代码段在析构的时候保证了无忧;

  如果logCreateBase代码段出现了exception那么就会在这里捕获异常,但是如果你在这里没有做exception的话,那么就会出现内存泄露,因为你的dctor没有完全执行完,所以你的对象没有完全析构掉,必然出现内存泄露;



   现在看来看More Effective 真是本好书,,,,


   但是里面有一节,中还在使用auto_ptr我感觉这个smart_pointer一般还是不要在single thread 中一般使用shared_ptr或者使用scoped_ptr这个指针不错,尽量减少auto_ptr的使用是明智的、


0 0
原创粉丝点击