C++ 使用引用更新智能指针

C++ 使用引用更新智能指针,c++,c++11,reference,shared-ptr,smart-pointers,C++,C++11,Reference,Shared Ptr,Smart Pointers,我想从引用更新智能指针 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_ptr; //有些事。。。 无效更新(共享我的玩具、我的玩具和玩具){ 我的玩具&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;
}
shared_ptr my_toy_ptr;
//有些事。。。
无效更新(共享我的玩具、我的玩具和玩具){
我的玩具&ptr=&toy;
}
…但是他的代码产生了一个错误


如何执行此操作?

不要将堆栈分配对象的地址传递给
std::shared\u ptr
toy
将在其作用域结束时被销毁,
std::shared_ptr
将尝试
删除
新的
d。std::shared_ptr所持有的地址必须是动态分配对象的地址(虽然可以提供自定义删除程序,但这里不是这种情况)


要更改a
std::shared\u ptr
正在管理的对象,请使用。

请勿执行此操作!使用API。您需要使用
make_shared
。另外,您的智能指针不是通过引用传递的,因此该函数不会有任何外部影响。很抱歉,我的示例是错误的。我刚刚用我的真实案例更新了这个问题。@vdenotaris,作为参数
toy
传递的是什么?如何调用
update()