最近准备重温
C++,正好看到有关类和占用空间的问题,于是整理了下。先上代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <iostream> using namespace std;
class ClassA {
};
class ClassB {
public: ClassB() {}; ~ClassB() {};
};
class ClassC { virtual void fun() {}; };
int main() {
ClassA A; cout << "ClassA:" << sizeof(A) << endl;
ClassB B; cout << "ClassB:" << sizeof(B) << endl;
ClassC C; cout << "ClassC:" << sizeof(C) << endl;
return 0; }
|
结果:
1 2 3
| ClassA:1 ClassB:1 ClassC:4
|
【分析】 1)ClassA 里面没有定义任何变量和函数,本应该是 0
的,但是声明变量需要占用一个字节,因此是 1。
2)ClassB
里面仅仅定义了构造函数和析构函数。调用构造函数和析构函数只需要知道地址即可,而这些函数的地址只与类型相关,而与实例无关,编译器不会因为这两个函数在实例中添加任何信息。
3)ClassC
中仅有一个虚函数。C++编译器一旦发现类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每个实例中添加一个指向虚函数表的指针。
PS:编译器 GCC 4.6.2