【发布时间】:2019-12-20 07:35:25
【问题描述】:
我读到了这个问题:C++ Virtual class inheritance object size issue,并且想知道为什么虚拟继承会在类中产生一个额外的 vtable 指针。
我在这里找到一篇文章:https://en.wikipedia.org/wiki/Virtual_inheritance
告诉我们:
但是,在一般情况下,这个偏移量只能在运行时知道,...
我不明白这里与运行时相关的内容。完整的类继承层次结构在编译时是已知的。我了解虚函数和基指针的使用,但是虚继承没有这样的东西。
谁能解释一下为什么某些编译器(Clang/GCC)使用 vtable 实现虚拟继承以及在运行时期间如何使用它?
顺便说一句,我也看到了这个问题:vtable in case of virtual inheritance,但它只指向与虚函数相关的答案,这不是我的问题。
【问题讨论】:
-
注意:vtable/vptr 是实现细节。只要它们能够以某种方式实现标准要求的行为,编译器就不需要使用它们。
-
@RadosławCybulski:你错了,所以请点击我提供的链接。该问题明确表明,在不使用任何虚函数的情况下涉及到一个 vtable。
-
感谢您指出不相关的答案并将其标记为重复。问题是关于“虚拟继承”而不是“虚拟功能!
-
@Klaus 人们有时会犯错误或感到困惑。请记住保持文明并对您的 cmets 和编辑保持耐心。
-
@user4581301 这个问题很好很清楚。有时人们只是碰巧问过或看到过类似的东西,所以在关闭时赶紧开枪。
标签: c++ vtable virtual-inheritance memory-layout vptr