在这个例子中
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")))
当然.
ptr.reset();
ptr = std::make_shared<obj>("new");
Run Code Online (Sandbox Code Playgroud)
这与你的"除了"子句(至少不完全匹配)不匹配,并且它首先破坏旧对象.
我可以制作各种变化的页面.
没有单功能API shared_ptr首先破坏共享指针的内容,然后执行一些代码来构造替换.
无法在单个调用中执行此操作ptr.reset(new obj("new")),因为传入reset函数的参数将在reset输入之前进行评估.无论如何reset,new obj("new")将首先评估.
因此,您必须先调用reset()然后在第二步中传递新创建的对象.