假设我们有以下程序:
class A
{ public:
virtual fun(){};
};
class B:public A
{ public:
virtual fun(){};
};
int main()
{
A a1;
B b1;
}
我的问题是,当我们运行这个程序时,将创建多少个vtables
和多少个vptrs
?
最佳答案
它在很大程度上依赖于实现,但通常你会为每个具有任何虚函数的类获得一个 vtable 对象(没有虚函数或基类不需要它们的类),并且每个具有 vtable 的类的对象一个 vptr (指向类的 vtable)。
如果您有多个继承和虚拟基类,事情就会变得更加复杂——这可以通过多种方式实现。一些实现为每个额外的基类使用一个额外的 vtable(所以你最终每个类每个基类都有一个 vtable),而其他实现使用一个带有额外信息的单个 vtable。这可能导致每个对象需要多个 vptr。
B 中的 virtual
关键字是无关紧要的——如果该函数在基类中是虚函数,则无论如何它在派生类中都是虚函数。
关于c++ - C++ 程序中的虚拟表和虚拟指针的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8932032/