我想從參考更新智能指針。使用參考更新智能指針
shared_ptr<My_Toy> my_toy_ptr;
// Something...
void update(shared_ptr<My_Toy> my_toy_ptr, My_Toy& toy){
my_toy_ptr = &toy;
}
...但他的代碼生成一個錯誤。
我該怎麼做這個操作?
我想從參考更新智能指針。使用參考更新智能指針
shared_ptr<My_Toy> my_toy_ptr;
// Something...
void update(shared_ptr<My_Toy> my_toy_ptr, My_Toy& toy){
my_toy_ptr = &toy;
}
...但他的代碼生成一個錯誤。
我該怎麼做這個操作?
不要將堆棧分配對象的地址傳遞給std::shared_ptr
。 toy
將在其範圍的末尾遭到破壞,並且std::shared_ptr
將嘗試delete
東西不是new
d。由std::shared_ptr
所保存的地址必須爲爲動態分配對象的地址(儘管可以提供自定義刪除器,但在此情況並非如此)。
要更改std::shared_ptr
管理的對象,請使用std::shared_ptr::reset()
。
對不起,我的例子不對。我剛剛用我的真實案例更新了這個問題。 – vdenotaris
@vdenotaris,作爲參數'玩具'傳遞了什麼?如何調用'update()'? – hmjd
不要這樣做!使用API。 – lulyon
您將需要使用'make_shared'。此外,您的智能指針不能通過引用傳遞,因此該函數不會有任何外部影響。 –