文章目录
C++11 智能指针
智能指针实质
实质:一个模板类(在堆上),只有一个成员----即传送进来的原始指针。
头文件#include<memory>
独占智能指针
该指针所指向的地址只能由此指针去访问,不能指针值传递,也不能拷贝构造。
int *p=new int;
*p=2;
unique_ptr<int>h(p); //独占智能指针h, 原始指针p
//*h与*p所指地址一致。
unique_ptr<int>k(new int);
*h.get(); //获得原始指针,暂时获得,原智能指针不变
*h.release(); //获得原始指针,并将原来的智能指针置空
unique_ptr<int>h1; ~~h1=h;~~
//这是错误的,独占智能指针不能值传递
h.reset(); //释放掉指针所占资源
h.reset(new int(3)); //释放掉指针所占资源,
//并重新申请资源,并赋值为3
h=nullptr; //h置空,自动释放掉之前new的空间
int *p= new int[2]; //普通的指针数组
unique_ptr<int[]>p2(new int[2]); //独占智能指针数组
共享智能指针
多个指针可以指向同一个地址,其内部有计数(k2.use_count();
)-----表示当前资源被多少指针引用,当计数为0时;自动释放此资源。
shared_ptr<int>K2(new int(20));
make_shared<指针类型>指针变量名(所指地址中存放的内容)
<----->shared_ptr<类型>指针变量名(new 类型(内容))
//指向一个值为10个9的string类型的shared_ptr
shared_ptr