在这个例子中
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"))
)
答案 0 :(得分:8)
不确定
ptr.reset();
ptr = std::make_shared<obj>("new");
这不符合您的&#34;除了&#34;子句(至少不完全是这样),它首先破坏旧对象。
我可以制作不同的页面。
shared_ptr
中没有单一功能API首先销毁共享指针的内容,然后执行一些代码来构建替换。
答案 1 :(得分:5)
无法在ptr.reset(new obj("new"))
这样的单个调用中执行此操作,因为传入reset
函数的参数将在输入reset
之前进行评估。无论reset
做什么,new obj("new")
都会先评估。
所以你必须先调用reset()
,然后在第二步中传递一个新创建的对象。