多个或虚拟继承下的类的内存布局和vtable?

mez*_*hic 15 c++ polymorphism inheritance multiple-inheritance virtual-inheritance

我正在阅读"在C++对象模型中",试图了解如何通过vtable实现多重和虚拟继承.(我完全理解单个多态性).

我很难理解在虚拟继承期间或在转换期间需要定位方法时究竟做了什么,因为要执行大量的偏移计算.

有人能够帮助理解如何在多个或虚拟继承示例中使用多个vtable吗?如果我能理解布局和问题,我可能会更好地理解这个问题.

Chr*_*phe 16

C++实现通常使用vtable来实现虚函数.vtable是一个指向函数的指针表.具有虚函数的类的每个对象都有一个指向vtable的隐藏指针,该指针包含该类的所有虚函数的地址.

当调用虚函数时,代码计算vtable中函数指针的偏移量,并调用存储在那里的地址的函数.

在此输入图像描述

当基类的派生类覆盖virtuall函数时,该类的虚拟表只指向覆盖的函数而不是原始函数.

这篇优秀的文章详细解释了它如何工作,包括单继承和多继承.

  • 这仅适用于单一继承。如果我们有 `class B: virtual public A{` 会怎样? (2认同)