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

Bar*_*zar 6 c++ c++11

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

Whi*_*TiM 5

您只需重新分配重置它。

例:

#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;
}
Run Code Online (Sandbox Code Playgroud)