1、一个空类,没有任何成员,它的大小是多少,答案是与编译器相关,一般是1. 任何类型的对象都需要有一个内存地址,否则都无法证明它的存在了,那么既然分配了地址,也就必然就有一定的大小,而空类没有任何成员所以编译器就象征性的给它分配1个字节(最小长度)的空间以表征它的存在。
class A
{
};
sizeof(Class A) = 1
2、如果给它显示声明构造函数和析构函数,它的大小是多少,答案还是1.
类的实例里只有各种类型的数据,而函数存储在代码段空间,这些函数只与类的类型相关,而与类的实例无关,编译器不会再类的实例中添加如何函数信息,所以大小还是1。
class A
{
public:
A() {}
~A() {}
};
sizeof(class A) = 1
3、如果把析构函数声明为虚函数,它的大小是多少,32位系统下是4, 64位系统下是8
C++编译器发现在类中有虚函数,就会为该函数生成虚函数表,并在每个类的实例中添加一个指向该虚函数表的指针。
class A
{
A() {}
virtual ~A() {}
}
sizeof(class A) = 8
(gdb) print a
$2 = {_vptr.A = 0x400d50}