有没有办法让shared_ptr.reset(new obj)首先调用析构函数?

时间:2018-03-16 20:56:55

标签: c++ shared-ptr

在这个例子中

std::shared_ptr<obj> ptr = new obj("old");
ptr.reset(new obj("new"));

首先调用obj("new")的构造函数,然后调用obj("old")的析构函数。

有没有办法先破解obj("old")然后再构建obj("new")? (首先是致电ptr.reset(),然后致电ptr.reset(new obj("new"))

2 个答案:

答案 0 :(得分:8)

不确定

ptr.reset();
ptr = std::make_shared<obj>("new");

这不符合您的&#34;除了&#34;子句(至少不完全是这样),它首先破坏旧对象。

我可以制作不同的页面。

shared_ptr中没有单一功能API首先销毁共享指针的内容,然后执行一些代码来构建替换。

答案 1 :(得分:5)

无法在ptr.reset(new obj("new"))这样的单个调用中执行此操作,因为传入reset函数的参数将在输入reset之前进行评估。无论reset做什么,new obj("new")都会先评估。

所以你必须先调用reset(),然后在第二步中传递一个新创建的对象。