在一个库项目中,我有一个低级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。
有没有办法解决这个问题?
答案 0 :(得分:3)
最佳做法页面建议采用第二种方法,这就是您应该做的事情:使用make_shared
。