当前位置: 网站首页 > 开发语言 > C/C++

《深度探索C++对象模型》读书笔记(3)

时间:1970-1-1 08:33:31来源: C/C++作者:admin 点击:0次 字体 [ С]

  在visual C++ 6.0中测试如下代码:

 #include "iostream"
using namespace std;

class X {};
class Y : public virtual X {};
class Z : public virtual X {};
class A : public Y,public Z {};

int main()
{
    cout<<"sizeof(X): "<<sizeof(X)<<endl;
    cout<<"sizeof(Y): "<<sizeof(Y)<<endl;
    cout<<"sizeof(Z): "<<sizeof(Z)<<endl;
    cout<<"sizeof(A): "<<sizeof(A)<<endl;

    return 0;
}

   得出的结果也许会令你毫无头绪

 sizeof(X): 1
sizeof(Y): 4
sizeof(Z): 4
sizeof(A): 8

   下面一一阐释原因:

   (1)对于一个class X这样的空的class,由于需要使得这个class的两个objects得以在内存中配置独一无二的地址,故编译器会在其中安插进一个char.因而class X的大小为1.

   (2)由于class Y虚拟继承于class X,而在derived class中,会包含指向visual base class subobject的指针(4 bytes),而由于需要区分这个class的不同对象,因而virtual base class X subobject的1 bytes也出现在class Y中(1 bytes),此外由于Alignment的限制,class Y必须填补3bytes(3 bytes),这样一来,class Y的大小为8.

发表评论
验证码:
最新评论