对简单对象来说,内存结构布局很简单,遵循以下描述:
1、非静态数据成员是影响对象所占据内存大小的主要因素,随着对象的增加而增加;
2、所有对象共享一份静态数据成员,用sizeof计算对象大小时不会包含静态数据成员占据内存的大小;
3、静态成员函数和非静态成员函数不影响对象内存的大小;
4、如果对象中包含虚函数,会增加4字节的空间用来保存虚函数表指针。
对单继承类,遵循如下描述:
在派生类实例头部存在一个基类实例,虚函数表与基类公用一个。基类的内存布局和简单对象的内存布局一样,派生类内存布局就是基类的内存布局下面加上派生类自己添加的成员所构成的内存布局,同时只是修改基类的虚函数表而不会新增虚函数表指针。对一个类来说,整个程序只有一个虚函数表,不管对象有多少。
对多重继承基本上和单继承一样,只有一种例外,就是派生类派生自具有共同基类的两个父类时会造成创建该派生类的父类的父类的两个实例对象,解决方法就是采用虚继承,虚继承可以只产生一个同一父类实例。