有没有办法让 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()
,然后在第二步传递一个新创建的对象。
在这个例子中
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()
,然后在第二步传递一个新创建的对象。