在 C++ 中,虚函数表(Virtual Table,简称 vtable) 和 虚表指针(Virtual Pointer,简称 vptr) 是编译器用来实现动态多态(Runtime Polymorphism)或动态绑定(Late Binding)的底层机制。 简单来说,当你使用基类指针或引用去调用派生类中重写的虚函数时,C++ 就是通过 vtable 和 vptr 来准确找到究竟该执行哪个版本(基类还是派生类)的函数的。 下面详细拆解它们是什么以及是如何工作的: --- 1. 核心概念 A. 虚函数表 (vtable) 本质: 它是一个函数指针数组。 归属: 它属于类(Class)级别。也就是说,同一个类的所有对象共享同一张虚函数表。 生成时机: 在编译期由编译器自动生成。 内容: 表中记录了该类所有虚函数的实际内存地址。如果派生类重写(override)了基类的虚函数,vtable 中对应的函数指针就会被替换为派生类函数的地址;如果没有重写,则保留基类函数的地址。 B. 虚表指针 (vptr) 本质: 它是一个隐藏的指针变量。 归属: 它属于对象(Object / Instan...