4.CPP虚函数表作用

  1. 4.CPP虚函数表作用
    1. 4.1 题目
    2. 4.2 深入解析
    3. 4.3 答题示例
    4. 4.4 关键词联想

4.CPP虚函数表作用


4.1 题目

C++中虚函数表的作用是什么?


4.2 深入解析

虚函数表(vtable)是 C++ 实现运行时多态的核心机制。编译器在编译阶段为每个定义了虚函数的类生成一张虚函数表,通常存放在只读数据段中,表中存储该类各虚函数在内存中的地址(函数指针)。每个包含虚函数的类实例对象内部都会有一个隐藏的指针(vptr),它在对象创建时被初始化为指向对应类的 vtable。

当通过基类指针或引用调用虚函数时,运行时并不是直接跳转到一个静态地址,而是:

  1. 通过对象中的 vptr 找到该对象的 vtable;
  2. 在 vtable 中根据虚函数的偏移位置取出函数指针;
  3. 调用该指针指向的函数,这就是动态绑定(dynamic dispatch)。

要点

  • 只有声明了至少一个虚函数的类才会生成 vtable;
  • 每个对象实例携带一个 vptr,增加了对象大小(一个指针的开销);
  • 派生类会继承并可以覆盖基类的 vtable 条目,实现多态行为。

4.3 答题示例

“虚函数表(vtable)是 C++ 实现运行时多态的底层机制。编译器为每个含虚函数的类生成一张函数指针数组(vtable),每个对象实例内部隐藏一个 vptr 指向它的 vtable。调用虚函数时,程序通过 vptr 查表获取实际的函数地址并跳转执行,从而实现基于对象实际类型的动态绑定。需要注意的是,只有定义了虚函数的类才有 vtable,对象尺寸会额外包含一个指针。”


4.4 关键词联想

  • 多态(Polymorphism)
  • 动态绑定(Dynamic Dispatch)
  • vtable / vptr
  • 运行时类型识别(RTTI)
  • 函数指针数组
  • 对象布局
  • 覆盖(Override) vs 重载(Overload)
  • 虚继承(Virtual Inheritance)
  • 性能开销(内存和间接调用成本)
  • 类内存模型(Object Memory Model)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏