使用参考更新智能指针

vde*_*ris -1 c++ reference smart-pointers shared-ptr c++11

我想从参考更新智能指针。

shared_ptr<My_Toy> my_toy_ptr;

// Something...

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

     my_toy_ptr = &toy;
}
Run Code Online (Sandbox Code Playgroud)

...但是他的代码产生了错误。

我该怎么做?

hmj*_*mjd 5

不要将堆栈分配对象的地址传递给std::shared_ptrtoy将在其作用域的尽头被破坏,并且std::shared_ptr将尝试进行delete某些非newd的操作。由a持有的地址std::shared_ptr 必须是动态分配的对象的地址(尽管可以提供自定义删除器,但此处不是这种情况)。

更改a std::shared_ptr管理的对象std::shared_ptr::reset()