reset函数有两种形式,一种是不带参数的形式,另一种是带参数的形式。 不带参数的reset函数会将智能指针的指向对象清空,即将其置为空指针。例如: ``` std::shared_ptr<int> ptr(new int(10)); ptr.reset(); //重置智能指针,将其指向对象清空 ``` 带参数的reset函数会将智能指针的指向对象改为新的对象。
std::shared_ptr<Person> p1(newPerson(1));//Person(1)的引用计数为1std::shared_ptr<Person> p2 = std::make_shared<Person>(2);p1.reset(newPerson(3));//首先生成新对象,然后引用计数减1,引用计数为0,故析构Person(1)//最后将新对象的指针交给智能指针std::shared_ptr<Person> p3 = p1;//...
reset函数是shared_ptr提供的一个成员函数,用于重新设置shared_ptr指向的对象或释放其所有权。reset函数有多种使用方式,可以接受不同类型的参数。 reset函数可以接受一个空指针作为参数,用于释放shared_ptr指向的对象。当我们需要提前释放内存或不再需要某个对象时,可以调用reset函数将shared_ptr重置为空指针。这样,在sha...
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::operator= 或通过调用成员函数 shared_ptr::reset 将该资源的所有权分配给它。拥有资源的 shared_ptr 对象共享控制块。 控制块包含:拥有该资源的 shared_ptr 对象的数目, 指向该资源的 weak_ptr 对象的数目; 该资源的删除器(如果有), 控制块的自定义分配器(如果有)。使用空指针初...
reset()函数还可以接受一个指针参数,用于改变shared_ptr所指向的对象。下面是一个示例代码: ``` #include <iostream> #include <memory> int main() { std::shared_ptr<int> ptr(new int(5)); std::cout << *ptr << std::endl; // 输出5 ptr.reset(new int(10)); std::cout << *ptr << ...
shared_ptr::reset 使用英语阅读 添加 添加到集合 添加到计划 通过 Facebookx.com 共享LinkedIn电子邮件 打印 项目 2015/06/09 本文内容 参数 备注 示例 要求 请参见 替换拥有的资源。 void reset(); template<class Other> void reset(Other *ptr;); template<class Other, class D> void reset(Other *ptr...
p.reset(new string(*p)); //现在可以放心的改变p了 *p+=newVal; //p所指向的对象只有自己一个智能指针,现在可以放心的改变对象的值了 1. 2. 3. 4. 5. 6. 十一、异常处理 当程序发生异常时,我们可以捕获异常来将资源被正确的释放。但是如果没有对异常进行处理,则有以下规则: ...
1. reset(),参数为空时,会释放shared_ptr所拥有的对象,释放后执行get()会返回false 2. reset(xx),参数不为空时会先释放原来拥有的对象,再获取新对象的所有权 3. get() 判断shared_ptr当前是否拥有对象 实验如下图 代码如下 #include <iostream>
这是没有明白reset()函数的语义, 通过源码可能比较好理解: void reset() _NOEXCEPT { shared_ptr().swap(*this); } 这是reset()的实现, 用shared_ptr()调用构造一个临时指针, 并将其与调用reset()的指针对象(上例中的ptr)进行交换, 原对象指向的资源变为nullptr, 引用计数变为0. ...