6
  1. 虚拟继承是否使用 vTable?如果是或否,那么它是如何实现的
  2. 虚拟继承在内存中的行为如何?
  3. 虚拟继承的任何其他替代方案

非常感谢概念性的解释。

4

1 回答 1

1

虚拟继承根据编译器以不同的方式实现。

1) 是的,vc 和 gcc 都使用 vTable 指针。但是 vc 有另一个指针 ref 作为虚拟基指针。

2) 对于经典的虚拟继承,如 Left < Top; 右 < 上; Bottom < Left 和 Right 堆栈应该是这样的:

Left.vptr  // -> to its vtable

Left::element_in_left

Right.vptr

Right::element_in_right

Bottom::element_in_bottom

Top::element_in_top

程序使用vptr来查找vtable,对于gcc来说,viable中有一个virtual base offset值。vptr + base offset 将给出父地址。

3)我不知道你是什么意思。在 C++ 编译器中有不同的方法来实现它。其他语言也有自己的绑定函数的方法。

于 2012-09-07T04:48:02.483 回答