Effective-cpp-#17

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
2
3
std::shared_ptr<Widget> pw(new Widget)

processWidget(pw, priority());

建议

  • 以独立语句将newed对象存到智能指针中;