将创建多少个VTable?

时间:2014-11-07 10:29:52

标签: c++ vtable

class Base
{
public:
    virtual void function1() {};
    virtual void function2() {};
};

class D1: public Base
{
public:
    virtual void function1() {};
};

class D2: public Base
{
public:
    virtual void function2() {};
};

对于上面的例子,将创建3个V.tables(source)。

如果我删除了D1中函数的虚拟关键字,D2会不会创建3个v.tables?

1 个答案:

答案 0 :(得分:1)

首先,如果一个成员函数在base中声明为virtual,那么无论你是否明确说明,它都将在所有派生类中是虚拟的。(虽然它依赖于实现)

第二个具有至少一个功能的每个类只有一个且只有一个vtable。因此,对于您的问题,即使您从派生类函数中删除虚拟,它们仍然是虚拟的,每个类将有三个vtable(最重要的实现)。