【发布时间】: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