虚函数指针 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位
标签:虚表,函数,miao,64,函数指针,age,指针 From: https://www.cnblogs.com/JOKER2255/p/18304658