2013-08-19 115 views
-2

我想從參考更新智能指針。使用參考更新智能指針

shared_ptr<My_Toy> my_toy_ptr; 

// Something... 

void update(shared_ptr<My_Toy> my_toy_ptr, My_Toy& toy){ 

    my_toy_ptr = &toy; 
} 

...但他的代碼生成一個錯誤。

我該怎麼做這個操作?

+0

不要這樣做!使用API​​。 – lulyon

+1

您將需要使用'make_shared'。此外,您的智能指針不能通過引用傳遞,因此該函數不會有任何外部影響。 –

回答

4

不要將堆棧分配對象的地址傳遞給std::shared_ptrtoy將在其範圍的末尾遭到破壞,並且std::shared_ptr將嘗試delete東西不是new d。由std::shared_ptr所保存的地址必須爲爲動態分配對象的地址(儘管可以提供自定義刪除器,但在此情況並非如此)。

要更改std::shared_ptr管理的對象,請使用std::shared_ptr::reset()

+0

對不起,我的例子不對。我剛剛用我的真實案例更新了這個問題。 – vdenotaris

+0

@vdenotaris,作爲參數'玩具'傳遞了什麼?如何調用'update()'? – hmjd