effective c++ 17 独立语句将newed对象置入智能指针
小于 1 分钟
effective c++ 17 独立语句将newed对象置入智能指针
智能指针可以帮助用户更好的管理资源,避免资源泄露。但是如果使用不当,还是可能出现资源泄露。本文便是讲解了智能指针使用不当可能出现资源泄漏的一个场景。
分析
考虑下面的函数:
processWidget(std::shared_ptr<Widget>(new Widget), priority());
如果编译器的执行顺序像下面这样:
- 执行"new Widget"
- 调用priority(抛出异常)
- 调用std::shared_ptr构造函数
如果第2步出现了异常,那么第三步就执行不到,资源就无法析构。
修改方法为如下:
std::shared_ptr<Widget> pw(new Widget);
processWidget(pw, priority());
这样写,不仅解决了可能存在的资源无法析构的问题,并且代码结构也都清晰了很多。
总结
- 请以独立语句将newed对象对象置于智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露。
Loading...