Error

C++博客 首页 新随笔 联系 聚合 管理
  217 Posts :: 61 Stories :: 32 Comments :: 0 Trackbacks

Effective C++

条款17:以独立语句将newed对象置入智能指针

         Stroe newed objects in smart pointers in standalone statements

请记住:

1.  以独立语句将newed对象存储于(置入)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄漏。

――――――――――――――――――――――――――――

int priority();

Widget> pw,int priority);

 

――――――――――――――――――――――――――――

Widget>(new Widget),priority());

 

在调用processWidget之前,编译器必须创建代码,做以下三件事:

1.  调用priority

2.  执行“new Widget

3.  调用trl::shared_ptr构造函数。

顺序不定,但2一定执行于3的前面。

如果执行顺序是以下:

1.执行“new Widget

2.调用priority

3.调用trl::shared_ptr构造函数。

此种情况下,万一对priority的调用导致异常,“new Widget”返回的指针将会遗失,因为它尚未被置入trl::shared_ptr内。

――――――――――――――――――――――――――――

解决办法:以独立的语句将newed对象置入智能指针。

Widget> pw(new Widget);

 

processWidget(pw,priority());

posted on 2012-11-13 15:41 Enic 阅读(122) 评论(0)  编辑 收藏 引用 所属分类: about boost

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理