今天早上本想研究下运行时绑定,没想到研究了下类的长度,先贴下图片看下结果:
当类为空时,系统也要分配一个实例的内存,长度为一;有虚函数的时候,因为有虚指针,所以系统也要分配一个(void)的长度是4,派生类则不再分配的虚指针空间,与父类是共用的,因为我的基类里还有个int类型的变量所以,长度为8,派生类A里也重新定义了个Int变量,所以又多4长度,类里函数不占长度,所以派生类C和基类A一样。
然后请教了某个大神,贴一下他给的总结:
对的也得遵循字节对齐
类大小归纳以下几个原则:
1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。
2.普通成员函数与sizeof无关。
3.虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节。
4.类的总大小也遵守类似class字节对齐的,调整规则。
5.说明子类只是共用父类的虚函数表,因此一旦父类里有虚函数,子类的虚函数将不计入sizeof大小
OK,睡觉。。。