class如同int等内建类型一样,分配有一定大小的内存,本文通过基本类、含有虚函数的类、单继承的派生类和多重继承的派生类来考察类的内存布局规律。
1、普通类对象的大小
sizeof(struct C000)本应该是0,但有一个占位符; 普通成员函数,静态成员函数,及静态成员变量皆不会在类的对象中有所表示。其中普通成员函数是在编译期通过this指针与类关联的,静态成员函数和静态成员变量相当于全局变量,只不过比其多一个类名称的限定。
2、普通派生类对象的大小
可以理解为全盘继承下来,而不用管是否重名以及继承方式,两个父类有重名的成员,则在向上调用父类成员时就会产生向上二义性。 3、带虚函数类对象的大小
带虚函数的类不同于普通类的是有一个虚函数表指针,也就是一个指针数组,而sizeof(*)为4.单继承派生类与基类共用一个虚函数表,但表的条目可能不一样,可能派生类虚函数表的条目多一些,或者是进行了改写。 4、带虚函数多重派生类对象大小
含虚函数类多继承派生类拥有多个虚函数表,派生类可以重写各个基类的虚函数,从而修改了虚函数表,也可以添加虚函数,这个添加的虚函数指针条目将添加到第一个虚函数表中。 |
类大小sizeof(class)
最新推荐文章于 2024-04-06 23:57:03 发布