sizeof用法
通常语言面试有三种类型,第一种类型就是问对语言概念的理解程度。这类题目中,sizeof是经被问到的一个概念。
1.定义一个空的类型,里面没有任何成员变量和成员函数,对该类型求sizeof,得到的结果是多少?
答案为:1
为什么不是0?
空类型的实例不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型实例的时候,它必须在内存中占有一定的内存空间,否则无法使用这些实例。
2.如果在该类型中添加构造函数和析构函数,对该类型求sizeof,得到结果又是多少?
答案为:1
类的普通成员、静态成员函数是不占类内存的,至于你说的函数指针在你的类中有虚函数的时候存在一个虚函数表指针,也就是说如果你的类里有虚函数则 sizeof(CObject)的值会增加4个字节。
3.那如果把析构函数标记为虚函数呢?
答案为:4
C++编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每个实例中添加一个指向虚函数表的指针,一个指针占4个字节的内存,所以sizeof(CObject)的值为4.
注意:C++中,应该是对象才会被分配内存空间吧??为什么CObject内存大小是8,刚好和两个成员变量的大小之和一致!难道还没实例化的时候,类就 已经有了内存空间了?
答案:sizeof(CObject)是在编译时就计算了的,一个类定义了,它所占的内存大小也就在编译的时候计算好了,这时只是得到了它占内存的大小,但是并没有进行内存分配,可以这样想:编译器肯定知道类实例化占内存的大小,只有知道了大小,才能分配这些内存空间。