参考
直接看这篇博文
本文是上述博文的扩充
代码
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
class A {
int k;
public:
virtual void aa() {};
};
class B:public virtual A {
int j;
public:
virtual void bb() {};
};
class C:public virtual B {
int i;
public:
virtual void cc() {};
};
int main() {
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
system("pause");
return 0;
}
分析
输出为16 32 48
考虑两个因素:win64位系统指针占8字节+对齐
A:一个int4字节,一个指向虚表的指针8字节,考虑对齐,共4+‘4’+8=16字节
B:一个int4字节,继承A一个int4字节,继承A的指针8字节,指向B、A的两个指针8字节,共4+4+8+8*2=32
C:因为B是对齐的,就直接32+C的一个int4字节+两个指针8字节*2,考虑对齐,共32+4+‘4’+16=48字节