以下代碼的問題是從書約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) 「C++對象模型內部」,則輸出爲:
我這裏還有我的問題
1的sizeof(X)= 1
書中說當X類型生成兩個實例時,比如說xa和xb。編譯會在A中插入一個字節,以便xa和xb可以具有不同的地址。我不太明白原因。
2,的sizeof(Y)= 4
通過使用虛擬繼承,我們將有一個額外的虛擬指針?我想這可能與多態中的虛擬指針不同。任何人都可以給我Y的內存佈局嗎?
謝謝!
每個問題一個問題請 –
第一個問題,檢查:http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an- rq = 1 –
我認爲你的主要問題是,因爲Y使用虛擬繼承來從非多態類X派生,而Y本身是非多態的,所以虛擬繼承本身會導致Y有一個V表,因此它的大小是4 .. – CashCow