【发布时间】:2017-12-12 20:58:06
【问题描述】:
在虚拟继承的情况下,vtable 有什么用(或者为什么需要 vtable)?在这种情况下,这个 vtable 指向什么。
示例:
class A
{
void show()
{ }
};
class B : virtual A
{
void disp()
{ }
};
在上面的例子中,B 类的大小是 8 个字节。这意味着 B 类的 vptr 指向一个 Vtable。这个 vtable 指向什么。
【问题讨论】:
-
C++ 标准对 vtables 的主题没有什么可说的。因此,这些概念是特定于编译器的。你在哪个编译器上试过这个?
-
GCC 和 Clang 将它用于类型信息。
-
vtable 由指向函数的指针组成,所以它指向的基本上是机器代码块。
-
@melpomene,OP 实际上要问的是:在没有任何虚函数的正常继承的情况下,大多数编译器都不会打扰 vtable。在这种情况下,没有虚函数,但仍然有一个 vtable,这对他来说很奇怪。
-
@Frank ,是的,这正是我的问题。我读过这些 vtable 指向 A 类的子对象。这是真的吗?
标签: c++ inheritance virtual