C++智能指针

1、智能指针的原理
程序通常通过堆来存储动态分配的对象(程序运行时的对象),当动态对象不在使用时,需要对他们进行销毁。动态内存的管理是通过new delete来实现的。

new运算符:在动态内存中为对象分配一块空间并返回一个指向对象的指针

int *p=new(2);//*p初始化为2
int *p1=new[100]; //申请100个单位的内存空间

delete运算符:指向一个动态对象的指针,摧毁对象并释放与其相关联的内存。在delete之后,指针变成了悬空指针(指向一块曾经保存数据对象但现在已经无效的内存地址)。要想避免悬空指针,需要在delete之后将nullptr赋值给指针变量,这样就清楚指针不指向任何对象了

delete p;
p=nullptr;

2、C++中提出了智能指针
智能指针就是对普通指针进行封装,其实质是一个对象。使用类来封装资源的分配和初始化,在构造函数中完成资源的清理,可以保证正确的初始化和资源释放。

智能指针包含在头文件memory
包含shared_ptr、unique_ptr、auto_ptr、weak_ptr

shared_ptr:是一种强引用指针,允许多个指针指向相同的对象。每个shared_ptr都会有一个计数器与之相关联,通常称之为引用计数

shared_ptr<int> p;//空,可以指向类型为T的对象
shared_ptr<int> p=make_shared<int>(5)//使用make_shared函数来初始化
shared_ptr<int> p(new int (2));//传入指针通过构造函数来初始化

//拷贝赋值
shared_ptr<int> p2=make_shared<int>(6);
shared_ptr<int> p2copy(p2);//p2copy是p2的拷贝,此操作会递增p2的引用计数
p3=p2;//给p3赋值,会递增p2的引用计数


你可能感兴趣的:(C++)