1、为什么?
考虑下面的情况:方法声明为void processWidget(shared_ptr<Widget> pw,int priority)。
调用方法 processWidget(shared_ptr<Widget> (new Widget), getPriority()),在调用方法之前,要做三件事:
a、执行new Widget
b、调用shared_ptr的构造方法
c、调用方法getPriority()
可问题是:C++不保证上面的执行顺序(C#,Java保证)。那么问题就来了,如果是acb的执行顺序,并且c步骤异常,那么new出来的资源还没有放进资源管理类,导致内存泄漏。
2、如何解决上面的问题?
分开上面的语句,shared_ptr<Widget> pw(new Widget);
processWidget(pw, getPriority())