美文网首页Effective C++ 精读
Effective C++ Term 17 用智能指针接收 ne

Effective C++ Term 17 用智能指针接收 ne

作者: vancymoon | 来源:发表于2019-05-17 23:01 被阅读0次

有时候我们会写出这样考虑不够周全的代码

void processWidget(std::tr1::shared_ptr<Widget> pw, int priority);

实际调用这句时,如果是

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

会有三个动作发生

  • 调用new
  • 构造shared_ptr
  • 调用priority()

这三个动作的调用顺序是不固定的,如果实际发生的顺序为

  1. 调用new
  2. 调用priority()
  3. 构造shared_ptr

这时如果priority()抛出一个异常,new出来的资源就发生了泄漏,所以最好不要在函数参数中使用std::tr1::shared_ptr<Widget>(new Widget)这样的写法,而是写成单独的一句

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

相关文章

网友评论

    本文标题:Effective C++ Term 17 用智能指针接收 ne

    本文链接:https://www.haomeiwen.com/subject/fdgaaqtx.html