Effective C++
條款17:以獨立語句將newed對象置入智能指針
Stroe newed objects in smart pointers in standalone statements。
請記?。?/span>
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());