我正在阅读“C++ 对象模型内部”,试图了解如何通过 vtables 实现多重和虚拟继承。(我非常了解单多态性)。
当需要在虚拟继承期间或强制转换期间定位方法时,我很难理解究竟做了什么,因为要执行大量的偏移计算。
是否有人能够帮助理解在多重继承或虚拟继承示例中如何使用多个 vtable?如果我能理解布局和问题,我可能会更好地理解这个问题。
最佳答案
C++ 实现通常使用 vtables 来实现虚函数。 vtable 是指向函数的指针表。具有虚函数的类的每个对象都有一个指向包含该类所有虚函数地址的 vtable 的隐藏指针。
在调用虚函数时,代码会计算函数指针在虚表中的偏移量,并调用存放地址的函数。
当基类的派生类覆盖一个虚函数时,该类的虚表只指向被覆盖的函数而不是原始函数。
这个 excellent article explains详细说明它是如何工作的,包括单继承和多继承。
关于c++ - 多重或虚拟继承下的类的内存布局和vtable(s)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28521242/