2013-08-19 119 views
-2

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

shared_ptr<My_Toy> my_toy_ptr; 

// Something... 

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

    my_toy_ptr = &toy; 
} 

...但他的代码生成一个错误。

我该怎么做这个操作?

+0

不要这样做!使用API​​。 – lulyon

+1

您将需要使用'make_shared'。此外,您的智能指针不能通过引用传递,因此该函数不会有任何外部影响。 –

回答

4

不要将堆栈分配对象的地址传递给std::shared_ptrtoy将在其范围的末尾遭到破坏,并且std::shared_ptr将尝试delete东西不是new d。由std::shared_ptr所保存的地址必须为为动态分配对象的地址(尽管可以提供自定义删除器,但在此情况并非如此)。

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

+0

对不起,我的例子不对。我刚刚用我的真实案例更新了这个问题。 – vdenotaris

+0

@vdenotaris,作为参数'玩具'传递了什么?如何调用'update()'? – hmjd