【17】以独立语句将newed对象置入智能指针

时间:2023-03-09 09:31:37
【17】以独立语句将newed对象置入智能指针

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())