【问题标题】:Temporary boost::shared_ptr when passing to constructor of superclass传递给超类的构造函数时的临时 boost::shared_ptr
【发布时间】:2014-11-26 05:31:47
【问题描述】:

在一个库项目中,我有一个低级别的 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

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

有办法解决吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我实际上在文档中忽略了这一点。
    猜你喜欢
    • 2012-08-13
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多