- 有以下定義:
int priority();
void processWidget(std::tr1::shared_ptr<Widget> pw, int priority);
- 編譯不通過版本:
processWidget(new Widget, priority());
- 可能導(dǎo)致內(nèi)存泄露版本:
processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());
原因:new,priority調(diào)用,Widget構(gòu)造函數(shù)執(zhí)行順序不同衩婚。 - 推薦版本
首先以獨(dú)立語句得到實(shí)參莱预,之后將該實(shí)參傳入函數(shù)
std::tr1::shared_ptr<Widget> pw(new Widget);
preocessWidget(pw, priority());