c++ - 将创建多少个 VTable?

标签 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 中的函数删除 virtual 关键字,D2 这段代码是否仍会创建 3 个 v.tables?

最佳答案

首先,如果一个成员函数在基类中声明为虚函数,那么无论您是否明确声明,它在所有派生类中都是虚函数。(尽管它依赖于实现)

其次,每个至少有一个函数的类都有一个且只有一个虚表。因此,对于您的问题,即使您从派生类函数中删除虚拟,它们仍将保持虚拟,并且每个类将有三个 vtable(在大多数实现中)。

关于c++ - 将创建多少个 VTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26799138/

相关文章:

c++ - 什么是类(class)的 VTT?

C++:如何决定是按引用还是按值传递参数?

c++ - 存在用户定义的移动构造函数/赋值时的隐式复制构造函数

c++ - 如何将 wstring 转换为字符串?

C++ 对象作为参数

c++ - 与位置无关的代码和 vtable

c++ - 如何实现对适当虚表条目的跳转调用

c++ - 跳过 cin.get() 和 cin.ignore()

c++ - 在 C++ 中为虚拟函数禁用动态绑定(bind)(虚拟表创建)

C++ 未定义对 vtable 和继承的引用