现在有两个函数是这样使用的:
// 取得处理优先级 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());
本文通过一个具体例子说明了在C++中如何避免由于函数参数执行顺序不确定导致的资源泄漏问题,并给出了正确的实现方式。
5万+

被折叠的 条评论
为什么被折叠?



