More Effective C++(2)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值