在这个例子中
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,它首先销毁共享指针的内容,然后执行一些代码来构造替换。
关于c++ - 有没有办法让 shared_ptr.reset(new obj) 先调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49329383/