#include<memory>intmain(){// 创建一个包含5个int的数组std::unique_ptr<int[]>arr(newint[5]);// 获取原始指针数组int*rawPtr=arr.get();// 使用原始指针数组进行操作for(inti=0;i<5;++i){rawPtr[i]=i;}// 打印数组元素for(inti=0;i<5;++i){std::cout<<rawPtr[i]<<" ";}retur...
1.shared_ptr 1.1 shared_ptr介绍 shared_ptr主要用于托管动态分配的内存。 在程序中动态分配了一块内存,这块内存可以是变量可以是对象,为了避免内存泄露,我们必须在整个程序的所有可能跑到的分支,保证这块内存不用了之后可以得到正确的释放。 普通指针使用起来麻烦,而
智能指针,是一种特殊的指针,它可以自动释放new出来的指针,不需要程序员手动调用delete即可释放; 智能指针的原理 智能指针是一个包装类,内部包装了真正的数据指针(即new出来的内存地址)和一个引用计数。 当构造智能指针时(即智能指针的构造函数或者复制构造函数被调用时),引用计数会加1; 当析构智能指针时(即析构函...
unique_ptr的特点是只允许一个指针指向这块内存,unique_ptr赋值操作是不允许的,例如uniqueptr1=uniqueptr2;是不允许的,只能通过转移,uniqueptr1=move(uniqueptr2);将uniqueptr2指向的内存转移给uniqueptr1。 unique_ptr可以通过get获取地址, 通过->调用成员函数, 通过*(解引用) 创建方式 (1)通过已有的裸指针创建...
reset() 重置unique_ptr为空,delete其关联的指针。 release() 不delete关联指针,并返回关联指针。释放关联指针的所有权,unique_ptr为空。 get() 仅仅返回关联指针 use_count() 获取引用计数 std作用 std::make_unique 创建unique_ptr 对象C++14 std::move() 对象转移 智能指针管理的是堆上面的指针,(栈上面的...
operator*:解引用操作符,用于获取 unique_ptr 所指向对象的引用。 operator->:箭头操作符,用于通过 unique_ptr 访问对象的成员函数或成员变量。 get:返回指向所管理对象的裸指针。 reset:重置 unique_ptr,释放当前所管理的对象并接管新的对象。 release:释放对所管理对象的控制权,并返回该指针的裸指针。
一、智能指针存在的意义 二、shared_ptr 2.1、shared_ptr内存模型 2.2、shared_ptr使用场景 2.3、shared_ptr的基本使用和常用函数 2.3.1、初始化 make_shared / reset 2.3.2、获取原始指针 get() 2.3.3、指定删除器 2.4、shared_ptr使用要注意的问题 三、unique_ptr 3.1、unique_ptr是一个独占型的智能指针 3....
当执行std::move(ptr1)时,ptr1中的原始指针会被复制到临时的右值引用对象中,然后ptr2的构造函数将从这个临时对象中获取指针,并将ptr1中的指针设置为nullptr。当ptr2析构时,它会删除它所拥有的对象。 6.0 std::shared_ptr和std::weak_ptr std::shared_ptr是一种共享所有权的智能指针,多个std::shared_ptr可...
通过get()获取管理的指针unique_ptr<AA> pu(new AA("亚瑟")); AA* pa = pu.get(); 不支持普通的拷贝和赋值(源码里面禁用了)//拷贝 unique_ptr<AA> pu_1(new AA("亚瑟")); // unique_ptr<AA> pu_2 = pu_1; 错误,禁止拷贝 // unique_ptr<AA> pu_2; // pu_2 = pu_1; 错误,禁止...
Test *test =newTest;std::unique_ptr<Test>t(test);qDebug() << test <<"获取原始指针"<< t.get() <<endl;// t.release(); //释放其关联的原始指针的所有权,并返回原始指针,没有释放对象// t.reset();// 释放对象t->getString(); ...