C++ std::shared_ptr reset 1. 解释std::shared_ptr是什么 std::shared_ptr 是C++ 标准库中的一种智能指针,用于管理动态分配的内存。它通过使用引用计数机制来自动释放所管理的对象,当没有任何 std::shared_ptr 实例指向该对象时,对象会被自动销毁。这种方式可以有效地避免内存泄漏。
1. reset(),参数为空时,会释放shared_ptr所拥有的对象,释放后执行get()会返回false 2. reset(xx),参数不为空时会先释放原来拥有的对象,再获取新对象的所有权 3. get() 判断shared_ptr当前是否拥有对象 实验如下图 代码如下 #include <iostream> #include <memory> using namespace std; class CTest { pu...
当我们使用shared_ptr时,可能需要改变指向对象,比如将一个shared_ptr指向新的对象或者将它清空。此时,我们可以使用reset函数来实现这个功能。 reset函数有两种形式,一种是不带参数的形式,另一种是带参数的形式。 不带参数的reset函数会将智能指针的指向对象清空,即将其置为空指针。例如: ``` std::shared_ptr<int...
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;//...
shared_ptr是一种引用计数型的智能指针,通过记录有多少个shared_ptr指向同一个对象,来确定何时释放内存。 reset函数是shared_ptr提供的一个成员函数,用于重新设置shared_ptr指向的对象或释放其所有权。reset函数有多种使用方式,可以接受不同类型的参数。 reset函数可以接受一个空指针作为参数,用于释放shared_ptr指向的...
C++(std::shared_ptr 的成员函数 reset) std::shared_ptr是 C++ 标准库提供的智能指针类型之一,用于管理动态分配的资源。reset是std::shared_ptr类的成员函数之一,用于重新分配或重置std::shared_ptr所拥有的指针。 以下是reset成员函数的基本解释: 函数签名:...
// std_tr1__memory__shared_ptr_reset.cpp // compile with: /EHsc #include <memory> #include <iostream> struct deleter { void operator()(int *p) { delete p; } }; int main() { std::shared_ptr<int> sp(new int(5)); std::cout << "*sp == " << std::boolalpha << *sp <<...
ptr.reset(); if (ptr == nullptr) { std::cout << "ptr为空指针" << std::endl; } return 0; } ``` 在上述代码中,我们首先创建了一个shared_ptr对象ptr,并通过new关键字为其分配了一个int类型的动态对象。然后,我们通过reset()函数将ptr置为空指针,并在if语句中判断ptr是否为空指针。由于reset(...
shared_ptr 类型的对象能够获得指针的所有权并共享该所有权:一旦他们获得所有权,指针的所有者组就会在最后一个释放该所有权时负责删除该指针。 shared_ptr 对象一旦它们自己被销毁,或者它们的值因赋值操作或显式调用 shared_ptr::reset 而改变时,就会释放它们共同拥有的对象的所有权。一旦通过指针共享所有权的所有 sh...
1));//方式3 reset,如果原有的shared_ptr不为空,会使原对象的引用计数减1std::shared_ptr<int> p4 = std::make_shared<int>( 2);//方式4 一般来说std::make_shared是最推荐的一种写法。 增加计数 被引用则会增加计数 std::shared_ptr<int>ptr2(sp2);//再次被引用则计数+1 ...