由于攒在隐含成员呃填补字节,导致“一个内存对象的实际大小不像它看上去的那样”。但从应用编程的角度讲,没有必要了解这些底层的技术细节,因为它们是御园实现所关心的事情,但如果你了解了这些知识,可以使你在编程的时候头脑中始终保持一个清晰的“运行时对象图”。
一个C++复合类型对象,可能隐含的成员有:若干vptr、默认构造函数、默认拷贝构造函数、析构函数和默认拷贝赋值函数。
在什么情况下其对象会含有至少一个vptr成员,如下:
@ 该类含有虚函数,无论是自己定义的还是从基类继承下来的;
@ 该类的继承链中至少有一个基类是多态类;
@ 该类至少有一个虚基类(virtual base class);
@ 该类包含了多态的成员对象,但是该类不一定是多态类。
对象的世界大小变大的原因主要有两条:
@ 由编译器自动安插的额外隐含数据成员,以支持对象模型,例如vptr;
@ 出于对存取效率的考虑而增加的填补字节,以使对象的边界能够对齐到机器字长(WORD),即为WORD的整数倍。