C++ 虚拟表

💡 原文英文,约9300词,阅读约需34分钟。
📝

内容提要

本文介绍了C++中的虚拟表和虚拟继承,包括示例和内存布局。虚拟表用于实现多态性,包含函数指针和类型信息。虚拟继承允许钻石继承。文章解释了虚拟表中的两个析构函数和构造函数不在其中。

🎯

关键要点

  • C++中的虚拟表是实现运行时多态性的基础构件。
  • 虚拟表包含用于调度虚拟函数的信息和运行时类型识别的信息。
  • 非虚拟继承是最常用的继承方式,没有使用关键字virtual。
  • 示例中创建了四个类:Fruit、Drug、Apple和Orange。
  • 虚拟表是C++运行时多态性的关键组件。
  • 使用GCC编译器的-fdump-lang-class可以转储类层次结构信息。
  • 虚拟继承允许钻石继承,只有一个虚拟基类的实例会被创建。
  • 示例中创建了五个类:Item、Fruit、Drug、Apple和Orange。
  • 虚拟表表(VTT)用于对象构造和析构的瞬态虚拟表。
  • 虚拟表中包含多个函数指针和虚拟基类的偏移量信息。
➡️

继续阅读