关于C++类大小计算,这在一本书《深度探索C++对象模型》一书中有非常详细的介绍,我这里归纳整理:
本节讨论的是64位地址计算机,指针长度8字节
1、类的大小取决于以下成员:
a)非静态成员变量;
b) 虚函数table
c) 数据对齐
d) 空类
当然还要考虑单一继承,多继承以及虚拟继承(共享继承)。
因为有博主已经写了非常详细的:入口
我这里只对博主收尾的虚继承进行进一步讲解:
class A {
int a;
virtual void myfunA(){}//博主原文漏加了这个
};
class B:virtual public A{
virtual void myfunB(){}
};
class C:virtual public A{
virtual void myfunC(){}
};
class D:public B,public C{
virtual void myfunD(){}
};
大小计算:
sizeof(A)=16 int的4个字节+虚函数表指针8=16(对齐)
sizeof(B)=24 int的4个字节+虚函数表指针8 + 虚基表指针8=24(对齐)
sizeof(D)=24 int的4个字节+虚函数表指针8+虚函数表指针8 + 虚基表指针8=32(对齐)
参考:
https://blog.csdn.net/fengxinlinux/article/details/72836199
《深度探索C++对象模型》