c++ - C++ 程序中的虚拟表和虚拟指针的数量

标签 c++ virtual vtable vptr

假设我们有以下程序:

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/

相关文章:

c++ - 单例实例声明为 GetInstance 方法的静态变量,它是线程安全的吗?

c++ - 如何使用指针从不同的函数访问局部变量?

c++ - 一旦函数名称被声明为 'virtual' ,它是否可以再次变为非虚拟的?

c++ - 捕获dll异常后访问冲突

C++ 虚函数基返回类型建议

c++ - 使用gdb的C++多态类中的vtable

时间:2019-03-08 标签:c++d3dhooking-COMvtable

c++ - eclipse cdt : calling make file from command line and adding version number

c++ - Luabridge:返回 C++ 生命周期托管对象

c++ - 虚函数错误(vtable?)