在此示例中
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()
然后在第二步中传递新创建的对象。