使用引用更新智能指针

Update a smart pointer using a reference

本文关键字:智能 指针 更新 引用      更新时间:2023-10-16

我想从引用中更新一个智能指针。

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_ptrtoy将在其作用域结束时被销毁,而std::shared_ptr将尝试delete,而不是newd。std::shared_ptr所持有的地址必须是动态分配对象的地址(尽管可以提供自定义删除程序,但这里不是这样)。

要更改std::shared_ptr正在管理的对象,请使用std::shared_ptr::reset()