跳至内容
模块 3

内存与资源

掌握 C++ 的所有权模型 ── 从原始指针到智能指针和移动语义 ── 编写永不泄漏的代码。

开始学习9 节课

指针与引用

  1. 指针:地址、解引用与算术

    理解指针作为内存地址的本质,学习取地址和解引用运算符、数组中的指针算术、指针的 const 正确性,以及在现代 C++ 中何时仍然适合使用原始指针。

  2. 引用:左值、右值与陷阱

    探索左值引用和右值引用,理解 C++ 值类别,学习引用折叠规则和转发引用,并避免悬空引用的 bug。

  3. 动态内存:new、delete 及其危险

    学习动态分配如何通过 new 和 delete 工作,了解内存泄漏、双重释放和释放后使用的危险,并发现为什么现代 C++ 应该包含零个裸 new/delete。

智能指针

  1. std::unique_ptr:独占所有权

    学习 std::unique_ptr 如何提供零开销的独占所有权,如何使用 make_unique、C 资源的自定义删除器以及工厂函数模式。

  2. shared_ptr、weak_ptr 与所有权图

    理解使用 shared_ptr 的引用计数共享所有权,使用 weak_ptr 打破循环引用,了解控制块和别名构造,以及何时 shared_ptr 不是正确的选择。

移动语义与 RAII

  1. 移动语义与 std::move

    理解移动语义解决的问题,std::move 是一个转换(不是移动)的本质,实现移动构造函数和移动赋值运算符,以及为什么 noexcept 对容器性能至关重要。

  2. 完美转发与 std::forward

    理解为什么具名的右值引用是左值,学习使用 std::forward 的规范转发模式,以及 emplace_back 如何使用可变参数转发来就地构造对象。

  3. RAII:基本的资源管理模式

    学习 RAII(资源获取即初始化)── C++ 中异常安全资源管理的核心模式。实现 RAII 包装器,理解 lock_guard 和 scoped_lock,以及为什么 RAII 类型必须是仅移动或引用计数的。

高级内存

  1. 内存布局、对齐与对象表示

    理解结构体填充和对齐要求,优化成员排序以减小大小,了解缓存行和伪共享,以及使用 C++20 特性如 [[no_unique_address]] 实现紧凑布局。