前言
我们在使用C和C++进行开发的时候,申请堆区内存是必不可少的,但是很多时候,我们经常忘记释放他导致内存泄漏,从而导致程序崩溃,又或者在尚未使用完成的时候释放,从而导致出现野指针,都是非常危险的现象,所以我们在C++11的标准中提出了智能指针的概念,他就是一种可以帮我们自动释放内存的存在
共享智能指针 - shared_ptr
他是使用最多的智能指针,它可以让多个指针指向同一片内存,同时在这片内存指向变为0的时候,他就会被释放
他有三种构造方式
//直接构造
shared_ptr<int>ptr(new int(10));
//使用make_shared
shared_ptr<int>ptr1=make_shared<int>(9);
//直接赋值
shared_ptr<int>ptr2=ptr1;
同样你还可以使用他的一些成员函数
get()//获取当前指针
swap()//交换管理对象
reset()//对指针进行重置操作,使原有指向修改为新的指向,该函数会
首先将原有内存减1,当减小为0会释放内存
use_conut()//智能指针指向内存引用计数
同样的,智能指针只能管理一片内存,要是管理数组需要手动释放
//智能指针只能管理一块内存, 要是想管理数组, 需要手动释放
//智能指针管理数组, 需要自己指定lamb表达式自己释放
shared_ptr<A> ptr4(new A[5], [](A *p) {
//释放内存
delete[]p;
});
唯一智能指针 - unique_ptr
只允许一个智能指针指向这块内存
//直接构造
unique_ptr<int>ptr(new int(10));
//使用make_shared,在linux环境下无法使用
unique_ptr<int>ptr1=make_shared<int>(9);
弱指针 -weak_ptr
这个使用的很少,主要是为了解决循环引用导致的内存泄露,引入了弱指针,他不会计入共享指针的数值,所以他不会对内存进行管理,主要是用来检测是否被释放