次のコードは、私のコンピュータ(Windowsの、VS2010)で質問
#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;
}
"C++オブジェクト・モデルの中に" 本からあり、出力は次のようになります。
Here're私の質問
1、はsizeof(X)= 1
本は言いますX型が2つのインスタンス、例えばxaとxbを生成するとき。コンパイルによってAにバイトが挿入され、xaとxbは異なるアドレスを持つことができます。私はその理由をあまり理解していない。
2、はsizeof(Y)= 4
仮想継承を使用することにより、我々は、追加の仮想ポインタを持っているのだろうか?私はこれが多形性の仮想ポインタと異なるかもしれないと思います。誰も私にYのメモリレイアウトを教えてもらえますか?
ありがとうございました!
1つの質問につき1つの質問 –
第1質問のためにチェックしてください:http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an-空のクラスのオブジェクト?rq = 1 –
私はあなたの主な質問は、Yは仮想多項式のクラスXから派生するために仮想継承を使用し、Y自体は非多形であるため、virutal継承自体がYはvテーブルを持っているので、そのサイズは4です。 – CashCow