三种智能指针

智能指针的引入为c++降低了显式内存管理的风险。智能指针管理一个指针,避免因为忘记释放申请的内存而导致内存泄漏。

一、unique_ptr

由名字可以看出是有独占语义的智能指针,使用该指针管理的资源不可以再被其他智能指针所管理。实现该语义的方式是unique_ptr的拷贝构造函数和拷贝赋值运算符被禁用,但是支持转移语义。C++11中没有实现make_unique辅助函数,需要的话可以自己实现。

二、shared_ptr

共享型智能指针,可以多个智能指针管理一个资源,智能指针中的引用计数表示有多少个shared_ptr共同管理一个资源,当最后一个shared_ptr析构的时候释放掉资源。
可以通过构造函数传入一个原生指针来初始化一个智能指针,但是要注意不要使用相同的原生指针构造出不同的智能指针,这样会引起重复释放。推荐使用make_shared辅助函数,相比于使用原生指针初始化智能指针,该辅助函数可以一次性的申请需要用到的堆空间(需要管理的内存和辅助管理的内存(强引用计数、弱引用计数等等))。
另外智能指针还可以指定删除器,当管理一个数组的时候,一定要显式的指定删除器将释放操作改为delete[]。

weak_ptr

一般配合shared_ptr使用,来解决循环引用的问题。他指向一个shared_ptr管理的资源,它的构造和析构都不会影响管理资源的shared_ptr的强引用计数,它存在的主要目的是为了监视shared_ptr管理的资源的生命周期。在必要的使用使用lock方法可以升级为一个shared_ptr。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值