通八洲科技

c++中的vptr是什么 c++虚函数指针详解【底层】

日期:2026-01-02 00:00 / 作者:冰火之心
vptr 是 C++ 编译器为含虚函数的对象自动插入的隐藏指针,位于对象内存布局起始处,大小与平台指针宽度一致(32 位为 4 字节,64 位为 8 字节),指向所属类的虚函数表(vtable);它在构造函数执行前由编译器初始化,单继承下每个对象一个且恒在开头,多重继承时可能有多个。

vptr 是 C++ 编译器为每个含有虚函数的对象自动插入的一个隐藏指针,全称是 virtual function table pointer(虚函数表指针)。它不显式出现在类定义中,但真实存在于对象内存布局的最前端,指向该对象所属类的虚函数表(vtable)。

vptr 的位置和大小

在绝大多数主流编译器(如 MSVC、GCC、Clang)中:

vptr 怎么工作

当通过基类指针或引用调用虚函数时,实际执行流程依赖 vptr:

这个过程完全在运行时完成,与变量声明类型无关,只取决于对象实际类型。

vptr 不是“每个类一个”,而是“每个对象一个”

注意区分两个概念:

多重继承时可能有多个 vptr(如虚继承或菱形继承场景),但单继承下始终只有一个,且恒在对象开头。

vptr 的初始化时机

vptr 在对象构造过程中由编译器自动设置: