Effective C++ 精读

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

2019-05-17  本文已影响0人  vancymoon

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

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

实际调用这句时,如果是

processWidget(std::tr1::shared_ptr<Widget>(new Widget), 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());
上一篇 下一篇

猜你喜欢

热点阅读