[英]Errors in std::make_shared() when trying to make shared_ptr?
(使用Visual Studio 2010)我正在嘗試在項目中創建一個現有類的shared_ptr(該類是在std :: shared_ptr存在十年之前編寫的)。 此類采用非常量指針指向另一個對象,它的空參數構造函數是私有的。
class Foobar {
public:
Foobar(Baz* rBaz);
private:
Foobar();
}
當我嘗試為其創建一個shared_ptr時,事情進展不順利:
Baz* myBaz = new Baz();
std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(new Foobar(myBaz));
在VS2010上,這給了我
error C2664: 'Foobar::Foobar(const Foobar &)' : cannot convert parameter 1 from 'Foobar *' to 'const Foobar &'
3> Reason: cannot convert from 'Foobar *' to 'const Foobar'
由於某種原因,它似乎正在調用Foobar
的副本構造函數,而不是采用Baz*
的構造函數。
我也不確定cannot convert from 'Foobar *' to 'const Foobar'
部分。 我最好的解釋是我的shared_ptr<Foobar>
模板類型是錯誤的。 我將其設置為shared_ptr<Foobar*>
但這似乎是錯誤的,我看到的所有示例都沒有將類型設為原始指針。
似乎使所有shared_ptr<Foobar*>
都能正確編譯,但是當所有shared_ptr
超出范圍時,這是否會阻止Foobar
對象被正確刪除?
編輯:這似乎有關,但我沒有使用Boost: boost make_shared接受const引用。 有什么辦法解決這個問題?
Edit2:為清楚起見,如果您想知道為什么我使用make_shared()
,那么在我的實際代碼中, sharedFoo
變量是第三類的類成員(獨立於Foobar
和Baz
)。
那應該是;
std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(myBaz);
...因為make_shared通過運行構造函數為您構造了實際對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.