簡體   English   中英

嘗試制作shared_ptr時std :: make_shared()中出現錯誤?

[英]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變量是第三類的類成員(獨立於FoobarBaz )。

那應該是;

std::shared_ptr<Foobar> sharedFoo = std::make_shared<Foobar>(myBaz);

...因為make_shared通過運行構造函數為您構造了實際對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM