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

标签 c++ shared-ptr

在这个例子中

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/

相关文章:

C++ 预处理器指令

c++ - 为自定义类 std::shared_ptr 实例调用 Operator()

c++ - 带 malloc 和 free 的 shared_ptr

c++ - 如何从具有特化的类模板中定义静态成员变量?

c++ - 指向二维数组的指针

c++ - 网格中的高效方法

c++ - 为什么 D 中的并行代码如此糟糕?

c++ - 当 weak_ptr 的 shared_ptr 被销毁时会发生什么?

c++ - 函数中shared_ptr的初始化

c++ - 哪些库对 std::make_shared 使用了 "We Know Where You Live"优化?