虚拟继承如何工作?

时间:2012-09-07 04:14:31

标签: c++ memory inheritance virtual

  1. 虚拟继承是否使用vTable?如果是或否,那么它是如何实施的
  2. 虚拟继承在内存中的行为方式?
  3. 虚拟继承的任何其他替代方法
  4. 真的很感激概念性的解释。

1 个答案:

答案 0 :(得分:1)

虚拟继承以不同的方式实现,具体取决于编译器。

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

2)对于经典的虚拟继承,如Left<最佳;对<最佳;底部<左和右 堆栈应该是这样的:

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,存在可行的虚拟基本偏移值。 vptr + base offset将给出父地址。

3)我不确定你是什么意思。在C ++编译器中有不同的方法来实现它。其他语言有他们绑定功能的方法。