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

auz*_*uzn 1 c++ shared-ptr

在这个例子中

std::shared_ptr<obj> ptr = new obj("old");
ptr.reset(new obj("new"));
Run Code Online (Sandbox Code Playgroud)

obj("new")将首先调用will 的构造函数,然后调用will的析构函数obj("old").

有没有办法首先破坏obj("old")然后再构建obj("new")?(除ptr.reset()先致电然后致电ptr.reset(new obj("new")))

Yak*_*ont 8

当然.

ptr.reset();
ptr = std::make_shared<obj>("new");
Run Code Online (Sandbox Code Playgroud)

这与你的"除了"子句(至少不完全匹配)不匹配,并且它首先破坏旧对象.

我可以制作各种变化的页面.

没有单功能API shared_ptr首先破坏共享指针的内容,然后执行一些代码来构造替换.


Ste*_*ner 5

无法在单个调用中执行此操作ptr.reset(new obj("new")),因为传入reset函数的参数将在reset输入之前进行评估.无论如何reset,new obj("new")将首先评估.

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