c++ - 虚拟继承是如何工作的?

标签 c++ memory inheritance virtual

<分区>

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

非常感谢概念性的解释。

最佳答案

虚拟继承的实现方式因编译器而异。

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/

相关文章:

c++ - 从 wab (mapi) 中提取联系人和分发列表(组)

memory - 在 R 中分配一个更大的对象?

c - 为什么指针算术可用于非连续的2d数组?

c++ - 从基于 QObject 的类继承构造函数

.net - 让抽象类实现接口(interface)的好处?

c++ - 代码:: block 调试器, "Cannot find the bounds of current function"

c++ - 难以理解数组的动态数组的一种实现

C++ 未定义类型错误

assembly - 为什么我们使用字节寻址而不是字寻址?

c++ - 复制构造函数不被继承