std::shared_ptr<int> p4 = new int(1);// error reset()包含两个操作。当智能指针中有值的时候,调用reset()会使引用计数减1.当调用reset(new xxx())重新赋值时,智能指针首先是生成新对象,然后将就对象的引用计数减1(当然,如果发现引用计数为0时,则析构旧对象),然后将新对象的指针交给智能指针保管。 获...
shared_ptr<int> ptr5; ptr5.reset(new int(250)); 3|03. 获取原始指针 对应基础数据类型来说,通过操作智能指针和操作智能指针管理的内存效果是一样的,可以直接完成数据的读写。但是如果共享智能指针管理的是一个对象,那么就需要取出原始内存的地址再操作,可以调用共享智能指针类提供的 get () 方法得到原始地址...
1. reset(),参数为空时,会释放shared_ptr所拥有的对象,释放后执行get()会返回false 2. reset(xx),参数不为空时会先释放原来拥有的对象,再获取新对象的所有权 3. get() 判断shared_ptr当前是否拥有对象 实验如下图 代码如下 #include <iostream> #include <memory> using namespace std; class CTest { pu...
reset函数的作用是将std::shared_ptr的所有权转移到新的指针上,同时释放原有指针所管理的资源。 示例: #include<iostream>#include<memory>intmain(){// 创建一个 shared_ptr,指向动态分配的整数std::shared_ptr<int> sharedInt =std::make_shared<int>(42);// 输出原始指针的值std::cout<< *sharedInt <...
reset()函数有两种使用方法,一种是不传递任何参数,另一种是传递一个指针参数。当不传递任何参数时,reset()函数会将shared_ptr置为空指针,即不指向任何对象。这种情况下,reset()函数会自动释放shared_ptr所管理的动态对象的内存。下面是一个示例代码: ``` #include <iostream> #include <memory> int main() {...
voidreset(Y*ptr, Deleter d, Alloc alloc); (4)(C++11 起) 以ptr所指向的对象替换被管理对象。能提供可选的删除器d,之后在无shared_ptr对象占有该对象时以之销毁新对象。默认以delete表达式为删除器。始终选择对应提供类型的恰当delete表达式,这是函数以使用分离的形参Y的模板实现的理由。
std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: auto pointer = std::make_shared<int>(10); auto pointer2 = pointer; // 引用计数+1 auto pointer3 = pointer; // 引用计数+1 ...
std::shared_ptr<int>ptr1=std::make_shared<int>(42);std::shared_ptr<int>ptr2=ptr1;//直接赋值,ptr1和ptr2共享相同的int对象 ```2.使用`reset`方法:可以使用`reset`方法将一个`shared_ptr`指向新的资源,同时释放原有资源。这也可以用于将`shared_ptr`重置为空。```cpp std::shared_ptr<int>...
std::shared_ptr 是一种管理对象生命周期的智能指针,通过引用计数机制自动释放对象。 自定义删除器 允许指定特定的资源释放操作。 std::make_shared 提供了更高效的智能指针创建方式。 std::weak_ptr 可与std::shared_ptr 一起使用,用于观察对象但不影响引用计数。 常用方法 包括use_count(), get(), reset()...