我想从参考更新智能指针。使用参考更新智能指针
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'。此外,您的智能指针不能通过引用传递,因此该函数不会有任何外部影响。 –