C++_Primer:动态内存、智能指针shared_ptr、unique_ptr、weak_ptr

内存分类

  • 静态内存
    • 类static对象
    • 局部static对象
    • 定义在所有函数体之外的变量
  • 栈内存:函数体内部非 static 变量。
  • 堆内存:存放动态分配的对象。
  • 静态内存、栈内存、堆内存管理:
    • 静态内存和栈内存中的对象,所占用的空间都是由编译器自动的创建和销毁的。
    • 堆内存中的对象由我们手动创造,并且需要我们手动delete。

动态内存

  • 动态内存管理:
    • new
    • delete
      • 销毁对象;释放内存。
  • 动态内存容易引发的问题:
    • 内存泄漏
    • 空悬指针

智能指针

  • 头文件:memory.h
  • 无论函数正常处理结束或发生异常,智能指针都能确保资源被释放
  • 使用内置指针管理内存时,若在 new 之后,在 delete 之前发生异常,则内存不会被释放。
  • 不要混用普通指针和智能指针。

shared_ptr:允许多个指针指向同一个对象

  • 默认初始化:空指针。
  • 最安全的分配和使用动态内存的方法:make_shared( args ),可以结合 auto .
  • 原理:引用计数
    • 每个 shared_ptr 都又一个关联的计数器。一旦计数器为0,它会自动释放自己所管理的对象。
  • shared_ptr 自动销毁所管理的对象,自动释放相关内存

unique_ptr:独占所指对象

  • unique_ptr 不支持普通的拷贝或赋值
    • 例外:可以拷贝或赋值一个即将销毁的 unique_ptr :用于从函数中返回。

weak_ptr:伴随类,弱引用。指向 shared_ptr 所指对象

  • weak_ptr 不控制所指向对象的生命周期。
  • 将 weak_ptr 绑定到 shared_ptr 上,不改变其引用计数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值