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



在此示例中

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

这与您的"其他"子句不匹配(至少不完全匹配),并且它会首先销毁旧对象。

我可以制作变体页面。

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

没有办法像ptr.reset(new obj("new"))那样在一次调用中做到这一点,因为传递给函数reset参数将在输入reset之前被计算。无论reset做什么,new obj("new")都将首先进行评估。

因此,您必须首先调用reset()然后在第二步中传递新创建的对象。

最新更新