在使用sizeof计算类的对象大小时,遵循以下几条规则:
空类对象占一字节,这一字节其实是占位符,编译器分配给该对象的,而不是该对象中存有数据
基本成员函数(虚函数除外)不占空间
-
成员变量占空间,大小为其类型自身大小(比如int型成员变量就会占用4字节),但是多个成员变量的空间之和要遵循一定的对齐规则:总空间大小是各类型(包括虚指针)中占空间最大那个的整数倍。比如:
class A{ int a; char b; }
上述类的对象就会占用8字节的空间,因为int为4字节,char为1一字节,所以总大小一定是4的整数倍,4+1=5,所以应该是8字节。
如果类中有虚函数,那么就存在一个虚指针(在64位机器中为8字节),这里需要注意的是,不管有几个 虚函数都只存在一个虚指针,因为该指针指向一个虚函数列表,那里存在各个虚函数对应的地址
派生类的对象大小 = 基类中各个成员总大小 + 自己类中各个成员总大小