您的位置:首页 > 编程语言 > C语言/C++

Effective C++ 条款17:以独立语句将newd的对象放进智能指针

2018-01-21 13:49 302 查看
以独立语句将new出来的对象存储于智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露

  processWidget(shared_ptr<Widget> (new Widget),priority());

  执行分两部分:

  1.new Widget;

  2.调用shared_ptr的构造函数

  3.调用priority()

  但是由于C++语言的取参数的次序弹性大,无法总是以特定次序进行,

  所以当出现

   1.new Widget;

   2.调用priority;

   3.调用shared_ptr的构造函数

   如果调用priority失败抛出异常

   则new出来的资源将会无对象支配导致资源泄露。

   所以一个良好的解决方法是:

   shared_ptr<Widget> pw(new Widget);在单独语句内以智能指针存储new来的对象

   processWidget(pw,priority);这样才不会导致资源泄露

   补充:之所以这样行得通,因为编译器对于“跨越语句的各项操作”没有重新排列的自由

   (只有在语句内它才有那样的自由度)。在上述修订后的代码内,“new Widget”表达式以及

   对“对shared_ptr构造函数的调用”这两个动作,和“对priority的调用”是分隔开来的,

   位于不同语句内,所以编译器不得在它们之间任意选择执行次序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐