Item 17 将new出来的对象存入智能指针

现在有两个函数是这样使用的:

 

// 取得处理优先级 int priority(); // 根据优先级,对动态分配的Widget做一些处理 void processWidget(std::tr1::shared_ptr<Widget> pw, int priority);

 

如果使用下面的方法调用函数,可能会发生资源泄漏:

 

processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());

 

原因是:函数的参数执行顺序是不一定的。如果new出来对象以后,还没有存入智能指针,这时调用priority出现异常,则资源泄漏。

改正的方法很简单,调整语句的顺序:

 

std::tr1::shared_ptr<Widget> pw(new Widget); processWidget(pw, priority());

你可能感兴趣的:(Item 17 将new出来的对象存入智能指针)