次のコードは、「C++オブジェクトモデルの内部」という本からのものです。
#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(Y)<<" "<<sizeof(Z)<<" "<<sizeof(A)<<endl;
return 0;
}
私のコンピューター(Windows、VS2010)では、出力は次のとおりです。
1 4 4 8
これが私の質問です
1、sizeof(X)= 1
この本は、Xタイプが2つのインスタンス、たとえばxaとxbを生成する場合を示しています。コンパイルは、xaとxbが異なるアドレスを持つことができるようにAにバイトを挿入します。理由がよくわかりません。
2、sizeof(Y)= 4
仮想継承を使用することで、追加の仮想ポインターができますか?これは、ポリモーフィズムの仮想ポインターとは異なる可能性があると思います。Yのメモリレイアウトを教えてもらえますか?
ありがとうございました!