class X{}; class Y:public virtual X{}; class Z:public virtual X{}; class A:public Y,public Z{};
使用sizeof在vs210上计算上面类的大小,计算结果如下
可以看到empty virtual base class的大小并不是0,编译器会安插一个char,这样可以让两个object在内存中有独一无二的地址
X a,b; if(&a == &b) cerr<<"Memery address is same!"<<endl;
class Y 和 class Z的大小是4,这是因为这两个函数虚继承了class X,virtual base class 被放在derived class object 开头的部分,又由于内存对其原则,自动补充了3bytes,所以大小是4。
Empty virtual base class 已经成为C++ OO设计的一个特有技术术语,它提供了一个virtual interface,没有定义任何数据。某些新的编译器对此提供了特殊处理,一个empty virtual base class被视为derived class object最开头的一部分。
class X,Y,Z在内存中的布局如下图所示:
时间: 2024-10-19 02:46:54