2014-10-01 101 views
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。

有沒有辦法呢?

回答

3

最佳實踐頁面提示了第二種方法,這就是您應該執行的操作:使用make_shared

+0

謝謝。我在文檔中實際上忽略了這一點。 – 2014-10-01 13:21:50

相關問題