【c++学习笔记】指针与智能指针

智能指针可以粗略的看成是new和delete的结合体,可以自动地分配内存和清理内存。

下面,我们将简单的介绍unique_ptr,shared_ptr和weak_ptr这三种智能指针

首先,我们需要引入管理智能指针的库文件

#include<memory>

让我们先创建一个简单的类来做测试

 

unique_ptr

如图为基本的使用方式

输出如下

需要注意的是,unique_ptr必须显式调用,隐式调用会报错

同时,unique_ptr不可以被复制

shared_ptr

如果我们需要指针在对象之间共享,那么shared_ptr就是个很好的选择。

shared_ptr使用的是引用计数,可以跟踪指针有多少个引用,当引用计数为0的时候,释放内存。同时它也会分配一块内存(控制块),用来存储引用计数,因此如无必要,出于效率的角度,优先使用unique_ptr。

 上面是一个简单的shared_ptr实现,大致流程如下:

  1. 第一作用域:什么都没有发生
  2. 第二作用域:创建共享指针shared_ptr0,此时引用计数为1
  3. 第三作用域:创建共享指针shared_ptr1并复制给shared_ptr0,此时引用计数为2,调用构造函数
  4. 第二作用域:shared_ptr1死掉,此时引用计数为1
  5. 第一作用域:shared_ptr0死掉,此时引用计数为0,调用析构函数

weak_ptr

同样可以共享,但不会计入到shared_ptr的引用计数中

在上面weak_ptr的实现中

  1. 第一作用域:什么都没有发生
  2. 第二作用域:创建弱指针shared_ptr0,此时引用计数为0
  3. 第三作用域:创建共享指针shared_ptr1并复制给shared_ptr0,此时引用计数为1,调用构造函数
  4. 第二作用域:shared_ptr1死掉,此时引用计数为0,调用析构函数

到这里就结束啦,如有纰漏,请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值