1
在一個庫項目中,我有一個低級別的BaseClass
類,它在構造函數中將某個對象作爲參數使用boost::shared_ptr
,就像這樣。當傳遞給超類的構造函數時臨時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。
有沒有辦法呢?
謝謝。我在文檔中實際上忽略了這一點。 – 2014-10-01 13:21:50