如何删除shared_ptr内容并将其替换为新对象

How to delete shared_ptr content and replace it with new object?

本文关键字:替换 新对象 对象 删除 何删除 shared ptr      更新时间:2023-10-16

我想知道是否有办法删除shared_ptr持有的对象并创建一个新对象,以便该shared_ptr的所有其他副本仍然有效并指向此对象?

您只需重新分配或重置它。

例:

#include <iostream>
#include <memory>
template<typename T>
std::shared_ptr<T> func(std::shared_ptr<T> m)
{
    m = std::make_shared<T>(T{});
    //m.reset();
    //m.reset(new int(56));
    return m;
}
int main(){
    std::shared_ptr<int> sp1 = std::make_shared<int>(44);
    auto sp2 = func(sp1);
    //sp1 is still valid after its copy was altered in func
    std::cout << *sp1 << 'n' << *sp2 << std::endl;
}