C++对象模型,尽量以空间优化和存取速度的优化来表现nonstatic Data Member,他把数据直接存放在一个class中,对于继承来的也是如此。
对于static Data Member, 则被放置在一个程序的global data segment中,不影响class的大小,无论创造了多少个该类的对象,这个static Data Member只有一个,即使对象不存在,这个数据也存在
1.先来看四个类
class TestSize0
{
};
class TestSize1 : public virtual TestSize0
{
};
class TestSize2 : public virtual TestSize0
{
};
class TestSize3 : public TestSize1, public TestSize0
{
};
2.那么大家认为这四个类的大小分别是多少呢
cout << sizeof(TestSize0) << endl;
cout << sizeof(TestSize1) << endl;
cout << sizeof(TestSize2) << endl;
cout << sizeof(TestSize3) << endl;
3.为什么第一个类size0里面什么都没有,为什么大小是1呢?
空类有一个隐藏的Byte,那是被编译器安插进去的一个char,使得这一个class的两个objects得以在内存中配置独一无二的地址
4.size1和size2虚继承了size0,那么他们内部就会有一个虚基类指针,指向一个虚基类表
在32位环境下,就是4个字节