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指向的对象或释放其所有权。 在C++编程中,动态分配内存是常见的操作。使用智能指针可以有效地管理动态分配的对象,避免手动释放内存的繁琐和容易出错的问题。shared_ptr是一种引用计数型的智能指针,通过记录有多少个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 <...
c++ shared_ptr的reset(), get() 总结 1. reset(),参数为空时,会释放shared_ptr所拥有的对象,释放后执行get()会返回false 2. reset(xx),参数不为空时会先释放原来拥有的对象,再获取新对象的所有权 3. get() 判断shared_ptr当前是否拥有对象 实验如下图 代码如下 #include <iostream> #include <memory>...
// 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 <<...
使用reset()时,传递给reset的参数不必是托管对象(也不能是);而使用=时,右侧必须是托管对象。
shared_ptr 对象一旦它们自己被销毁,或者它们的值因赋值操作或显式调用 shared_ptr::reset 而改变时,就会释放它们共同拥有的对象的所有权。一旦通过指针共享所有权的所有 shared_ptr 对象都释放了该所有权,则删除托管对象(通常通过调用 ::delete,也可以在构造时指定不同的删除器)。
voidreset(Y*ptr, Deleter d, Alloc alloc); (4)(C++11 起) 以ptr所指向的对象替换被管理对象。能提供可选的删除器d,之后在无shared_ptr对象占有该对象时以之销毁新对象。默认以delete表达式为删除器。始终选择对应提供类型的恰当delete表达式,这是函数以使用分离的形参Y的模板实现的理由。
shared_ptr<T> a(new T()); a.reset(); // 此后 a 原先所指的对象会被销毁,并且 a 会变成 NULL operator*,表示返回对存储指针指向的对象的引用。它相当于:* get()。 operator->,表示返回指向存储指针所指向的对象的指针,以便访问其中一个成员。跟get函数一样的效果。 示例1:shared_ptr的基础应用: ...
shared_ptr 对象一旦它们自己被销毁,或者它们的值因赋值操作或显式调用 shared_ptr::reset 而改变时,就会释放它们共同拥有的对象的所有权。一旦通过指针共享所有权的所有 shared_ptr 对象都释放了该所有权,则删除托管对象(通常通过调用 ::delete,也可以在构造时指定不同的删除器)。