代码
#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:继承A16个字节,自己一个int4字节,一个指向虚表的指针8字节,考虑对齐,共16+4+‘4’+8=32
C:继承B32个字节,C的一个int4字节,一个指向虚标的指针8字节,考虑对齐,共32+4+‘4’+8=48字节