
1月7日,2025冬季InfiniTensor大模型与人工智能系统训练营编程基础课第四课开讲,课程主题为《C++实践4》。
本节课介绍了vector类的功能,包括动态扩容机制、拷贝控制、移动语义等概念。通过实践深入理解了C++的内存管理、资源所有权和多态设计。同时介绍了STL容器、智能指针等在实际项目中的应用。
动态内存管理进阶
1. 扩容机制实现
reallocate函数设计:容量倍增策略(2倍扩容)- 内存拷贝与指针替换
- 析构函数中的内存释放:
delete[] data的重要性 - 内存泄漏检测:
valgrind工具使用与new/delete配对原则
2. 扩容触发逻辑
push_back中的容量检查:size == capacity判断- 用
reallocate进行扩容
拷贝构造与赋值操作
1. Big Three规则
- 析构函数:资源释放的最后防线
- 拷贝构造函数:用于初始化一个新对象,使其成为另一个对象的副本。
vector(const vector& other) - 赋值运算符:给已存在的对象赋新值
vector& operator=(const vector& other)
2. 成员初始化列表
- 常量成员与引用成员的初始化规范
- 性能优化:避免临时对象构造
3. 自赋值检查
if (this == &other)安全性判断
移动语义
- 将资源从一个对象转移到另一个对象,而不是拷贝。
1. 移动构造函数
- 右值引用:
Type&& - 开销低,不涉及数据拷贝
- 指针窃取策略:将原对象置为空指针
2. 移动赋值运算符
- 自赋值检查与返回值优化
std::move:负责将左值转为右值引用

3. Big Five扩展
- Big Three: 析构函数、拷贝构造、拷贝赋值
- Big Five: Big Three + 移动构造、移动赋值
- Big Zero: 不涉及资源管理的类
STL容器
1. std::vector
- 动态数组,连续内存存储
- 随机访问速度快
- 自动扩容机制
- 中间插入/删除效率较低
2. 其他常用容器
std::list:双向链表,非连续内存,快速插入std::array:连续内存分配,大小固定std::map/std::unordered_map:键值对存储
继承与多态
1. 继承
- 一个类(子类)继承另一个类(父类)的属性和方法。
- 使用冒号表示继承,如
class Number : public Object

2. 多态实现
- Virtual方法:允许子类重写父类的方法。
- Pure Virtual方法:父类中未实现的方法,子类必须实现。
virtual ... = 0 - Abstract Class:包含至少一个Pure Virtual方法的类。
3. 类型转换
dynamic_cast:运行时类型检查static_cast: 编译时类型转换reinterpret_cast:强制类型转换,不推荐常用
智能指针进阶
std::shared_ptr
- 自动管理内存,通过引用计数避免内存泄漏。
- 适用于多个对象共享同一资源的情况。
总结与展望
本节课通过实践深入讲解了C++的内存管理、资源所有权和多态设计。同时介绍了STL容器、智能指针等现代C++特性的实际应用。后续将带来更多其他课程!

📚 训练营报名持续进行中
扫码报名与加入群聊,或点击 「阅读原文」 直达官网报名

