当前位置: 首页 > news >正文

【c++八股文】Day2:虚函数表和虚函数表指针

以下是与之前讨论内容整理的对比总结表格,清晰展示虚函数表(vtable)、虚函数表指针(vptr)以及派生类vtable构建的关键特性:


虚函数表(vtable) vs 虚函数表指针(vptr)对比

特性虚函数表(vtable)虚函数表指针(vptr)
本质静态函数地址表指向vtable的隐藏指针
创建时机编译时(每个类唯一)运行时(对象构造时创建)
存储位置只读数据段(程序全局区)对象内存内部(通常为首个隐藏成员)
数量每个类1个每个对象1个(若类含虚函数)
生命周期程序全局存在随对象生命周期(构造时初始化,析构时失效)
是否可变❌ 编译后固定✔️ 在构造/析构链中动态修改
多态实现关键存储虚函数地址运行时定位实际类型的vtable

派生类虚函数表(vtable)构建过程

步骤操作规则说明示例
1继承基类vtable复制直接基类的vtable作为初始框架Derived复制Base的vtable
2覆盖基类虚函数替换重写(override)的虚函数地址为派生类版本Derived::func2()覆盖Base::func2
3追加新虚函数新增的虚函数地址追加到vtable末尾添加Derived::func3()到vtable末尾
4多重继承处理- 主基类:扩展其vtable(覆盖+追加)
- 次要基类:创建独立vtable(仅覆盖)
D继承B1(主)、B2(次)时:
- B1表扩展
- B2表独立
5虚继承处理添加虚基类偏移量(vboffs)等辅助信息解决菱形继承共享基类定位问题

vptr在对象生命周期中的变化

对象阶段vptr指向虚函数调用行为原因
基类构造中基类的vtable调用基类实现派生类部分未初始化,避免访问无效数据
派生类构造中派生类的vtable调用派生类覆盖实现对象已完全构造,支持多态
对象使用期派生类的vtable(最终)正常动态绑定多态核心机制
派生类析构中派生类的vtable调用派生类覆盖实现派生类部分仍有效
基类析构中基类的vtable调用基类实现派生类部分已销毁,防止调用无效函数

关键结论

  1. vtable的全局性

    • 编译时生成,类级别共享,与对象无关。
    • 派生类vtable通过 复制→覆盖→追加 基类vtable构建。
  2. vptr的动态性

    • 构造时:从基类到派生类逐级切换vptr指向(Base vtable → Derived vtable)。
    • 析构时:反向切换(Derived vtable → Base vtable)。
  3. 多态安全性

    • 构造/析构中vptr指向当前类的vtable,避免调用未初始化或已销毁的函数。
  4. 多重继承复杂性

    • 派生类可能包含多个vptr(主基类扩展表 + 次要基类独立表)。

💡 设计本质:通过编译时生成vtable + 运行时动态修改vptr,在保证安全的前提下实现高效运行时多态。

相关文章:

  • RPC启动机制及注解实现
  • day 50
  • 0:0 error Parsing error: Cannot read properties of undefined (reading ‘map‘)
  • Rust 学习笔记:通过异步实现并发
  • C语言学习20250611
  • 亮数据抓取浏览器,亚马逊数据采集实战
  • Flask 报错修复实战:send_file() got an unexpected keyword argument ‘etag‘
  • vite原理
  • MFC 第1章:适配 WIndows 编程的软件界面调整
  • 创建和运行线程
  • 训练过程中的 Loss ?
  • 红队手法:从web漏洞到ssh横向移动 实战方案
  • 达梦数据库dsc集群+异步主备
  • Android11三网共存
  • el-table-v2修改表头、单元格、表格整体的宽度、高度样式
  • 用 IRify 深入探索 WebShell 中的 Source/Sink 挖掘
  • C# ConcurrentDictionary 中获取指定范围的元素
  • 解密Spring Boot:深入理解条件装配与条件注解
  • 教师端用户操作手册
  • 使用 C/C++、OpenCV 和 Libevent 构建联网人脸识别考勤系统 [特殊字符]‍[特殊字符]
  • 家具建设企业网站/宁波seo服务
  • 技术网站建设/网络广告的形式有哪些
  • 网站建设管理概述/网站收录查询
  • 2017年网站推广怎么做/合肥网站优化排名推广
  • 手机上怎么做自己的网站/优化网站排名费用
  • 平面设计师用的网站/海南百度竞价排名