⚡
内存管理
6 篇文章
查看专题概览 / 复习建议
核心问题
- 栈和堆的分配与释放责任分别是什么
- RAII 为什么是 C++ 资源管理核心
- 智能指针各自适用什么场景
- 循环引用为什么会导致资源不释放
- 内存对齐和缓存友好的数据结构
- 对象生命周期与资源管理的关系
- 异常安全在资源管理中的重要性
- 自定义删除器和分配器的使用
建议复习顺序
- 栈与堆(内存分配基础)
- RAII 与异常安全(资源管理核心)
- 智能指针(现代内存管理)
new/delete与对象构造析构- 内存对齐和对象生命周期
- 异常安全保证(进阶话题)
子主题导航
- 栈与堆.md
- RAII与资源管理.md
- 智能指针与循环引用.md
- [new与delete及placement new.md](new与delete及placement new.md)
- 内存对齐与字节对齐.md
- 异常安全与强保证.md
高频追问
shared_ptr的控制块里通常有什么unique_ptr为什么不能拷贝- 析构函数为什么要倾向
noexcept - 对象生命周期和内存生命周期有什么区别
new做了哪些事,为什么malloc不能替代它placement new的典型使用场景是什么- 对齐为什么会影响性能和布局
- 为什么C++不采用垃圾回收
- 智能指针的性能开销分析
- 如何设计异常安全的资源管理类
易错点
- 把在栈上和作用域结束自动释放完全划等号
- 把
weak_ptr理解成弱版shared_ptr - 只会背智能指针定义,不会讲适用场景
- 混淆“分配内存”和“构造对象”两个步骤
- 忽略RAII的广泛适用性(不只是内存)
- 在资源管理类中忘记实现移动语义
- 不理解控制块和引用计数的实现
学习策略
记忆技巧
内存管理四层次:
- 栈 = “自动管理,快而小”
- 堆 = “手动管理,慢而大”
- RAII = “构造获取,析构释放”
- 智能指针 = “现代C++内存管理”
智能指针选择口诀:
- 独占用unique_ptr
- 共享用shared_ptr
- 观察用weak_ptr
- 原始指针仅作参数
关联学习
内存管理与前面的知识紧密相关:
- 语言基础:栈/堆分配、生命周期
- 模板与泛型:智能指针的模板实现
- 移动语义:unique_ptr的移动、资源转移
- const正确性:资源的const访问控制
理解内存管理需要结合具体场景,掌握各种机制的适用边界。