<分区>
- 虚拟继承是否使用 vTable?如果是或否,那么它是如何实现的
- 虚拟继承在内存中的表现如何?
- 虚拟继承的任何其他替代方案
非常感谢概念性的解释。
<分区>
非常感谢概念性的解释。
最佳答案
虚拟继承的实现方式因编译器而异。
1) 是的,vc 和 gcc 都使用 vTable 指针。但是 vc 有另一个指针 ref 作为虚拟基指针。
2) 对于经典的虚继承,比如Left < Top;右 < 上;底部 < 左右 堆栈应该是这样的:
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++ 编译器中有不同的实现方式。其他语言有他们绑定(bind)函数的方法。
关于c++ - 虚拟继承是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12311623/