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 中的函数删除 virtual 关键字,D2 这段代码是否仍会创建 3 个 v.tables?
最佳答案
首先,如果一个成员函数在基类中声明为虚函数,那么无论您是否明确声明,它在所有派生类中都是虚函数。(尽管它依赖于实现)
其次,每个至少有一个函数的类都有一个且只有一个虚表。因此,对于您的问题,即使您从派生类函数中删除虚拟,它们仍将保持虚拟,并且每个类将有三个 vtable(在大多数实现中)。
关于c++ - 将创建多少个 VTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799138/