之前看了很多关于类对象大小问题的计算,今天闲着没事就来整理整理,写写自己的看法。
首先,来看看一个只有构造函数和析构函数的空类:
输出结果为:1
因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。 而析构函数,跟构造函数这些成员函数,是跟sizeof无关的,也不难理解因为我们的sizeof是针对实例,而普通成员函数,是针对类体的,一个类的成员函数,多个实例也共用相同的函数指针,所以自然不能归为实例的大小。
如果给这个类添加成员变量,最后输出的大小就是这些成员变量的大小之和(这里涉及到一个成员对齐问题,不再叙述了)。
接下来再来看一个有继承的例子: