C++内存管理
运用内存管理技术,编写更精简、更安全的C++代码
作者:Patrice Roy
译者:
陈晓伟
目录
致谢
前序
关于作者
关于评审
前言
第一部分: C++内存模型解析
第1章 对象、指针与引用
1.1. 技术要求
1.2. C++的内存表示
1.3. 对象的基础特性
1.4. 数组
1.5. 总结
第2章 内存的风险操作
2.1. 常见问题
2.2. 指针
2.3. 类型双关
2.4. 总结
第3章 类型转换与cv限定符
3.1. 技术要求
3.2. 类型转换
3.3. 类型系统安全机制 —— cv限定符
3.4. C++标准类型转换操作
3.5. 总结
第二部分: 隐式内存管理技术
第4章 使用析构函数
4.1. 技术要求
4.2. 析构函数:要点回顾
4.3. 资源管理
4.4. RAII惯用法
4.5. 常见陷阱
4.6. 标准资源管理工具集
4.7. 总结
第5章 应用标准智能指针
5.1. 技术要求
5.2. 标准智能指针概览
5.3. unique_ptr
5.4. shared_ptr 与 weak_ptr 指针
5.5. 适用原生指针的场景
5.6. 总结
第6章 智能指针的实现原理
6.1. 技术要求
6.2. 所有权语义剖析
6.3. 简易的 unique_ptr 实现
6.4. 简易的 shared_ptr 实现
6.5. 基于策略的复制指针
6.6. 特殊场景下的智能指针
6.7. 总结
第三部分: 掌控内存管理机制
第7章 重载内存分配操作符
7.1. 为何需要重载分配函数?
7.2. C语言分配函数简析
7.3. C++分配操作符详解
7.4. 总结
第8章 实现简易的内存泄漏检测器
8.1. 技术要求
8.2. 设计方案
8.3. 初级方案(及其缺陷)
8.4. 问题诊断与修复
8.5. 方案重构与经验总结
8.6. 总结
第9章 特殊内存分配机制
9.1. 技术要求
9.2. 定位new与内存映射硬件
9.3. 简化nothrow new的应用
9.4. 内存耗尽处理与new_handler机制
9.5. 标准C++中的非常规内存管理
9.6. 总结
第10章 基于内存池的优化策略
10.1. 技术要求
10.2. 内存池管理机制
10.3. 动态参数变化处理
10.4. 分块式内存池实现
10.5. 总结
第11章 延迟回收机制
11.1. 技术要求
11.2. 延迟回收的核心概念
11.3. 程序结束时的无析构回收
11.4. 程序结束时的完整回收
11.5. 作用域结束时的精准回收
11.6. 总结
第四部分: 通用容器开发进阶指南
第12章 显式内存管理通用容器
12.1. 技术要求
12.2. 自定义vector
的替代方案
12.3. 自定义forward_list
的替代方案
12.4. 高效内存管理策略
12.5. 总结
第13章 隐式内存管理通用容器
13.1. 技术要求
13.2. 难点分析 —— 显式内存管理
13.3. 隐式管理 —— 基于智能指针
13.4. 评估架构重构技术
13.5. 实现ForwardList
13.6. 总结
第14章 支持分配器的通用容器
14.1. 技术要求
14.2. 分配器的价值
14.3. 传统分配器
14.4. 多态内存资源分配器
14.5. 总结
第15章 内存特性展望
15.1. 技术要求
15.2. 控制无构造对象的生命周期
15.3. 简单的重定位
15.4. 类型感知的内存分配/释放函数
15.5. 总结
附录 必备知识
A.1. struct与class关键差异
A.2. std::size_t
A.3. sizeof操作符
A.4. 断言机制
A.5. 未定义行为(UB)
A.6. 类型萃取
A.7. std::true_type 和 std::false_type 类型判别
A.8. std::conditional
条件类型选择
A.9. 标准算法
A.10. 函数对象与Lambda
A.11. 友元机制
A.12. decltype类型推导符
A.13. 完美转发
A.14. 单例设计模式
A.15. std::exchange() 原子交换