Effective C++
條款17:以獨立語句將newed對象置入智能指針
Stroe newed objects in smart pointers in standalone statements。
請記住:
1. 以獨立語句將newed對象存儲于(置入)智能指針內(nèi)。如果不這樣做,一旦異常被拋出,有可能導(dǎo)致難以察覺的資源泄漏。
――――――――――――――――――――――――――――
int priority();
Widget> pw,int priority);
――――――――――――――――――――――――――――
Widget>(new Widget),priority());
在調(diào)用processWidget之前,編譯器必須創(chuàng)建代碼,做以下三件事:
1. 調(diào)用priority
2. 執(zhí)行“new Widget”
3. 調(diào)用trl::shared_ptr構(gòu)造函數(shù)。
順序不定,但2一定執(zhí)行于3的前面。
如果執(zhí)行順序是以下:
1.執(zhí)行“new Widget”
2.調(diào)用priority
3.調(diào)用trl::shared_ptr構(gòu)造函數(shù)。
此種情況下,萬一對priority的調(diào)用導(dǎo)致異常,“new Widget”返回的指針將會遺失,因為它尚未被置入trl::shared_ptr內(nèi)。
――――――――――――――――――――――――――――
解決辦法:以獨立的語句將newed對象置入智能指針。
Widget> pw(new Widget);
processWidget(pw,priority());