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

Is there a way to make shared_ptr.reset(new obj) to call the destructor first?

在这个例子中

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"))

当然可以。

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

这与您的 "other than" 子句不匹配(至少不完全匹配),它首先销毁旧对象。

我可以制作变体页面。

shared_ptr中没有single-functionAPI先销毁共享指针的内容,然后执行一些代码构造替换

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

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