代码之家  ›  专栏  ›  技术社区  ›  Nayana Adassuriya

虚拟继承是如何工作的?[已关闭]

  •  6
  • Nayana Adassuriya  · 技术社区  · 13 年前
    1. 虚拟继承是否使用vTable?如果是或否,那么它是如何实现的
    2. 虚拟继承在内存中的表现如何?
    3. 虚拟继承的任何其他替代方案

    非常感谢概念性的解释。

    1 回复  |  直到 13 年前
        1
  •  1
  •   halfelf    13 年前

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

    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+基偏移量将给出父地址。

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