内存的智能管理—智能指针

前言

我们在使用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

这个使用的很少,主要是为了解决循环引用导致的内存泄露,引入了弱指针,他不会计入共享指针的数值,所以他不会对内存进行管理,主要是用来检测是否被释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值