- 有以下定义:
int priority();
void processWidget(std::tr1::shared_ptr<Widget> pw, int priority);
- 编译不通过版本:
processWidget(new Widget, priority());
- 可能导致内存泄露版本:
processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());
原因:new,priority调用,Widget构造函数执行顺序不同。 - 推荐版本
首先以独立语句得到实参,之后将该实参传入函数
std::tr1::shared_ptr<Widget> pw(new Widget);
preocessWidget(pw, priority());