Effective C++
条款17:以独立语句将newed对象置入智能指针
Stroe newed objects in smart pointers in standalone statements。
请记住:
1. 以独立语句将newed对象存储于(置入)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄漏。
――――――――――――――――――――――――――――
int priority();
Widget> pw,int priority);
――――――――――――――――――――――――――――
Widget>(new Widget),priority());
在调用processWidget之前,编译器必须创建代码,做以下三件事:
1. 调用priority
2. 执行“new Widget”
3. 调用trl::shared_ptr构造函数。
顺序不定,但2一定执行于3的前面。
如果执行顺序是以下:
1.执行“new Widget”
2.调用priority
3.调用trl::shared_ptr构造函数。
此种情况下,万一对priority的调用导致异常,“new Widget”返回的指针将会遗失,因为它尚未被置入trl::shared_ptr内。
――――――――――――――――――――――――――――
解决办法:以独立的语句将newed对象置入智能指针。
Widget> pw(new Widget);
processWidget(pw,priority());