传递给超类的构造函数时临时boost :: shared_ptr

时间:2014-10-01 11:26:36

标签: c++ boost constructor shared-ptr temporary

在一个库项目中,我有一个低级BaseClass类,它在构造函数中将boost::shared_ptr作为参数作为参数,就像这样。

class SomeClass {
  public:
    SomeClass(int i);
};

class BaseClass {
  private:
    boost::shared_ptr<SomeClass> someObject;
  public:
    BaseClass(boost::shared_ptr<SomeClass> object) : someObject(object) {}
};

我现在想要创建一个派生类,它使用一个新对象初始化shared_ptr,该对象是根据传递给派生类的构造函数的值创建的。

class DerivedClass : public BaseClass {
  public:
    DerivedClass(int i) 
      : BaseClass(boost::shared_ptr<SomeClass>(new SomeClass(i))) 
    {}
};

问题是这会创建一个临时的shared_ptr对象。根据文档中的最佳实践,应尽可能避免这种情况,因为它可能导致内存泄漏。 http://www.boost.org/doc/libs/1_56_0/libs/smart_ptr/shared_ptr.htm#BestPractices

但是,我不知道如何在不修改构造函数的签名的情况下创建命名的shared_ptr对象,从而更改我的库的API。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:3)

最佳做法页面建议采用第二种方法,这就是您应该做的事情:使用make_shared