涉及到了手动内存管理堆分配以及模板类的深层逻辑。

简要概述#

  • 核心目标:实现动态扩容
    • 作者明确了本集的目标:创建一个可以根据需要自动增长内存空间的容器,模拟 std::vector 的核心行为。
  • 成员变量的改变:从栈到堆
    • 不再使用 T m_Data[S],而是改为 T* m_Data 指针。
    • 引入两个关键计数器:m_Size(当前元素个数)和 m_Capacity(当前分配的总空间)。
  • 构造函数与析构函数
    • 在构造函数中预分配一小块初始内存
    • 强调了析构函数的重要性:必须使用 delete[] m_Data 释放堆内存,否则会导致内存泄漏。
  • 实现 PushBack 方法(核心逻辑)
    • 这是本集最精彩的部分:当 m_Size >= m_Capacity 时,触发“重新分配(Reallocation)”。
    • 扩容策略:作者演示了将容量翻倍(m_Capacity * 2)的常用工程策略。
  • 手动执行内存迁移
    • 详细步骤:申请一块更大的新内存 -> 将旧数据拷贝到新内存 -> 释放旧内存 -> 指针重定向。
  • 模板化的挑战
    • 讨论了为什么 Vector 需要模板化,以及在处理非简单类型(如 std::string)时,简单的拷贝可能会失效(引出对后续移动语义的思考)。
  • 性能测试与优化预告
    • 对比了自定义 Vector 与标准库 std::vector 的性能。
    • 提到目前的实现虽然可用,但频繁的拷贝开销巨大,引出后续关于 emplace_back 的话题。