虚函数表 和 虚函数指针

 虚函数指针 vptr 大小

  x86 平台 下为4个字节,x64 平台下为8个字节

例题:涉及内存对齐

 答案:

32位 miao age = 2 64位 miao age = 1 核心在这句话上 p【1】 = q【1】; 由于两个子类都继承自有虚函数的基类 因此都带有虚表指针 首先基类中只有一个int 4 32位下,虚表指针也是4 int*p后p【1】就是偏移一个单位(大小4) 跳过了虚表指针,访问到了成员变量age 因此cat的age = dog的age miao age = 2

64位下,虚表指针8 int*p后p【1】就是偏移一个单位(大小4) 没法越过虚表指针,p【1】 = q【1】; 只虚表指针的后4个字节的覆盖由于class cat和class dog的结构是相同的 虚表指针数值保持不便 也未操作过age成员变量,cat的age还是1 miao age = 1

intptr_t 这个宏可以兼容32位和64位

posted @   joker_2255  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示