首页 > 其他 > 详细

条款17:以独立的语句将资源置入智能指针。

时间:2015-10-06 19:33:06      阅读:217      评论:0      收藏:0      [点我收藏+]

先可考虑下下面这个语句:

 
1 int prioriy();
2 processWidget(shared_ptr<Widget>(new Widget), priority());
上面这条语句看似比较正常,不会泄露资源,但是实际上并非如此。
调用上面这个语句的时候基本上分成三步:
1. new Widget 
2. 根据Widget对象指针来构造shared_ptr
3. 调用priority();
但是c++与java不一样,不一定保证上述语句三部的执行步骤,所以下面这种情况也是可能的:
1. new Widget
2. 调用priority()
3. 根据Widget对象指针来构造shared_ptr
那么问题来了:
如果调用priority的时候抛出遗产,那么Widget资源可能就永远泄露了!!
所以避免这一类问题的方法很简单,就是把这两个步骤分开来写:
1 shared_ptr<Widget> pWgt(new Widget);
2 processWidget(pWgt, priority());
  这样就可以高枕无忧了.
 
小结:
  以独立的语句将对象存储于智能指针中,如果不这么做,那么异常一旦抛出,可能导致难以察觉的资源泄露

条款17:以独立的语句将资源置入智能指针。

原文:http://www.cnblogs.com/-wang-cheng/p/4857552.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!