虚拟继承时的vtable

时间:2017-07-08 19:00:57

标签: c++ inheritance virtual

虚拟继承的情况下,vtable(或者为什么需要vtable)有什么用?在这种情况下,这个vtable指向了什么。

示例:

class A
{
    void show()
    { }
};

class B : virtual A
{
    void disp()
    { }
};

在上面的例子中,B类的大小是8个字节。这意味着B类的vptr指向Vtable。这个vtable指向的是什么。

1 个答案:

答案 0 :(得分:0)

vtable是在C ++中实现virtual关键字的最常用方法 - 任何使用virtual关键字的类都将为其创建一个vtable,并且该类的每个实例都将包含一个指向那个(单个)vtable的指针。 vtable包含有关对象的动态类(支持dynamic_casttypeinfo)的信息,以及有关类的虚拟基类和函数所在位置的信息。

在这种特定情况下,B的vtable可能只包含动态类信息,因为A没有数据成员或虚函数。