以独立的语句将new对象置入智能指针

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

processWidget(std::tr1::share_ptr<Widget>(new Widget) , priority());

我们在这使用对象管理式资源,却可能造成资源的泄露。
上面主要有3三件事情需要完成:

  • priority()

  • new Widget

  • share_ptr的构造函数
    但是在C++中无法确定他们的调用顺序,于是可能出现下面这种:

  • new Widget

  • priority()

  • share_ptr的构造函数
    万一priority的调用发生异常,由于还未置入share_ptr ,那么new Widget的指针会遗失,造成资源泄露。
    因此最好以独立的语句将newed对象置入智能指针中

std:tr1::share_ptr<Widget> p(new Widget);
processWidget(p , priority())

参考:
Effective C++

posted @ 2017-03-20 19:06  Przz  阅读(258)  评论(0编辑  收藏  举报