-1

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

shared_ptr<My_Toy> my_toy_ptr;

// Something...

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

     my_toy_ptr = &toy;
}

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

我该怎么做这个操作?

4

1 回答 1

5

不要将堆栈分配对象的地址传递给std::shared_ptr. toy将在其范围结束时被破坏,并且std::shared_ptr将尝试delete一些不是newd. a 持有的地址std::shared_ptr 必须是动态分配的对象的地址(虽然可以提供自定义删除器,但这里不是这样)。

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

于 2013-08-19T13:09:13.067 回答