错误代码:
processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());
原因:若编译器最终获得这样的操作序列:
1、执行“ new Widget()”
2、调用priority
3、调用shared_ptr的构造函数
但万一对priority的调用导至异常,会发生什么事情?内存泄漏。
正确代码:
std::tr1::shared_ptr<Widget> pw(new Widget);
processWidget(pw, priority());