码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-10-06 19:35:20      阅读:199      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!