#include <iostream>  
using namespace std;
class   A
{
};
class   B
{
    char   ch;
    void   func() {  }
};
class   C
{
    char   ch1;             //占用1字节  
    char   ch2;             //占用1字节  
    virtual   void   func() { }
};
class   D
{
    int   in;
    virtual   void   func() {}
};
int  main()
{
    A   a;
    B   b;
    C   c;
    D   d;
    cout << sizeof(a) << endl;//result=1  
    cout << sizeof(b) << endl;//result=1  
    cout << sizeof(c) << endl;//result=8     
    cout << sizeof(d) << endl;//result=8     
}
 |                   1                          2                          3                 |                           class A { };                             cout<<sizeof(A)<<endl;//1                   |       
注:class A是一个空类型,它的实例不包含任何信息,本来求sizeof应该是0。
但当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。
|                   1                          2                          3                          4                          5                          6                          7                          8                          9                          10                          11                          12                          13                 |                           class B                             {                             public:                             B() {}                              ~B() {}                             };                             cout<<szieof(B)<<endl;//1                   |       
注:class B在class A的基础上添加了构造函数和析构函数。
由于构造函数和析构函数的调用与类型的实例无关(调用它们只需要知道函数地址即可),在它的实例中不需要增加任何信息。
所以sizeof(B)和sizeof(A)一样,在Visual Studio 2008中都是1。
|                     1                             2                             3                             4                             5                             6                             7                             8                             9                             10                             11                             12                             13                   |                              class C                                {                                public:                                C() {}                                virtual ~C() {}                                };                                cout<<sizeof(C)<<endl;//4                     |        
注:class C在class B的基础上把析构函数标注为虚拟函数。C++的编译器一旦发现一个类型中有虚拟函数,
就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。
在32位的机器上,一个指针占4个字节的空间,因此sizeof(C)是4。
C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。
如果在类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针指向虚函数表VTable,
在32位机器上,一个对象会增加4个字节来存储此指针,它是实现面向对象中多态的关键。而虚函数本身和其他成员函数一样,是不占用对象的空间的。
|                     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                   |                              class D {                                    char ch;                                    void func() { }                                };                                class E {                                    char ch1; //占用1字节                                    char ch2; //占用1字节                                    virtual void func() { }                                };                                class F {                                    int in;                                    virtual void func() { }                                };                                cout << "D的大小"<< sizeof(D) << endl;//1                                cout << "E的大小" << sizeof(E) << endl;//8                                cout << "F的大小" << sizeof(E) << endl;//8                     |