2 对象、资源与抽象
这一篇计划讨论函数接口、类与不变量、RAII、所有权、复制与移动,以及运行时多态。重点不是记住类的全部语法,而是学会用类型表达约束、管理资源。
本篇尚在编写中。
- 2.1 如何设计一个函数接口
- 按值、
const T&、T&、指针分别表达什么 - 返回值优先
- optional 参数与返回值
std::optional- C++23 的
std::expected - API 如何表达所有权、可空性和错误
- 按值、
- 2.2 类不是带函数的结构体
- 封装的真正目的:维护不变量
- 构造函数与成员初始化
- public/private
const成员函数- 一个类型什么时候值得成为类
- 普通聚合
struct什么时候更合适
- 2.3 资源管理与 RAII
- 资源不只是内存:文件、锁、socket、数据库连接
- 构造获取、析构释放
- 为什么尽量不直接写
new/delete std::unique_ptrstd::shared_ptr为什么不是默认选择- 裸指针通常如何表达 “观察但不拥有”
- 2.4 值语义、复制与移动
- 对象复制到底意味着什么
- 析构、复制、移动之间的关系
- Rule of Zero 应当先讲
- Rule of Five 作为理解底层机制的内容
- 移动不是 “更快的复制”
- moved-from 对象和异常安全
- 2.5 运行时多态只是一种抽象方式
- composition over inheritance
- 接口、抽象基类、虚函数、虚析构
- 对象切片
- 何时使用
std::variant - 何时使用模板 / concept
- 何时才真的需要继承树