store newed objects in smart pointers in standalone statements
动机
这个条例是为了避免在“以对象管理资源”中可能出现bug
比如
1 | processWidget(std::shared_ptr<Widget>(new Widget), priority()); |
这里可能出现的问题是,C++对于函数参数的调用次序不确定,假如顺序是:
- 调用new widget;
- 调用priority()
- 调用shared_ptr的构造函数
那么如果在priority中发生异常,new出来widget资源就会泄漏
解决方法
分离new语句:
1 | std::shared_ptr<Widget> pw(new Widget); |
建议
- 以独立语句将newed对象存到智能指针中;