学习资料
InfiniTensor冬季训练营编程基础课第四课《C++实践4》
发表于:

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++特性的实际应用。后续将带来更多其他课程!

📚 训练营报名持续进行中

扫码报名与加入群聊,或点击 「阅读原文」 直达官网报名