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<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");...
等价于 shared_ptr().swap(*this);。2-4) 以ptr 所指向对象替换被管理对象。Y 必须是完整类型且可隐式转换为 T。另外:2) 以delete 表达式为删除器。合法的 delete 表达式必须可用,即 delete ptr 必须良构,拥有良好定义行为且不抛任何异常。等价于 shared_ptr<T>(ptr).swap(*this);。
使用reset()时,传递给reset的参数不必是托管对象(也不能是);而使用=时,右侧必须是托管对象。
在某些情况下,reset可以避免动态内存分配。考虑一下代码
在进行reset(new xxx())重新赋值时,智能指针对象首先是生成新的对象,然后将指针对象的引用计数减1(当然,若方法计数为0,则析构),然后将新对象的指针交给智能指针保管。 例如: std::shared_ptr<Person> p1(new Person(1));// Person(1)的引用计数为1 ...
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():重置 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 ...
std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。 std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: ...