C++ std::shared_ptr reset 1. 解释std::shared_ptr是什么 std::shared_ptr 是C++ 标准库中的一种智能指针,用于管理动态分配的内存。它通过使用引用计数机制来自动释放所管理的对象,当没有任何 std::shared_ptr 实例指向该对象时,对象会被自动销毁。这种方式可以有效地避免内存泄漏。
reset函数的作用是将std::shared_ptr的所有权转移到新的指针上,同时释放原有指针所管理的资源。 示例: #include<iostream>#include<memory>intmain(){// 创建一个 shared_ptr,指向动态分配的整数std::shared_ptr<int> sharedInt =std::make_shared<int>(42);// 输出原始指针的值std::cout<< *sharedInt <...
等价于 shared_ptr().swap(*this);。2-4) 以ptr 所指向对象替换被管理对象。Y 必须是完整类型且可隐式转换为 T。另外:2) 以delete 表达式为删除器。合法的 delete 表达式必须可用,即 delete ptr 必须良构,拥有良好定义行为且不抛任何异常。等价于 shared_ptr<T>(ptr).swap(*this);。
方式一:shared_ptr<string> pTom{new string("tom")}; 方式二:shared_ptr<string> pTom; pTom.reset(new string("tom")); 方式三:shared_ptr<string> pTom = make_shared<string>("tom"); 推荐:使用方式三,更快(一次复制),更安全 使用 shared_ptr<string> pTom = make_shared<string>("tom");...
std::shared_ptr<T>::reset voidreset()noexcept; (1)(since C++11) template<classY> voidreset(Y*ptr); (2)(since C++11) template<classY,classDeleter> voidreset(Y*ptr, Deleter d); (3)(since C++11) template<classY,classDeleter,classAlloc> ...
使用reset()时,传递给reset的参数不必是托管对象(也不能是);而使用=时,右侧必须是托管对象。
在进行reset(new xxx())重新赋值时,智能指针对象首先是生成新的对象,然后将指针对象的引用计数减1(当然,若方法计数为0,则析构),然后将新对象的指针交给智能指针保管。 例如: std::shared_ptr<Person> p1(new Person(1));// Person(1)的引用计数为1 ...
reset():重置 std::shared_ptr,可以释放当前管理的对象,并可以重新分配新的对象。 unique():检查 std::shared_ptr 是否是唯一的,即引用计数是否为 1。 #include <iostream> #include <memory> void example() { std::shared_ptr<int> ptr1 = std::make_shared<int>(50); std::cout << "Use count ...
share_ptr没有release接口。 classA{public:A(inta):m_a(a){std::cout<<"contruct:"<<m_a<<endl;}~A(){std::cout<<"destruct:"<<m_a<<endl;}intm_a;};intfunc(){std::shared_ptr<A>sp1;A*p=newA(1);sp1.reset(p);//A(1)这个对象(这片内存)引用计数+1sp1.reset(newA(2));//旧对...
// shared_ptr::reset example#include <iostream>#include <memory>intmain () { std::shared_ptr<int> sp;// emptysp.reset (newint);// takes ownership of pointer*sp=10; std::cout << *sp <<'\n'; sp.reset (newint);// deletes managed object, acquires new pointer*sp=20; std::cou...