Я пробовал приведенную ниже программу по виртуальному наследованию с https://www.onlinegdb.com/online_c++_compiler ..
#include <iostream>
using namespace std;
class ABase{
int iMem;
};
class BBase : public virtual ABase {
int iMem;
};
class CBase : public virtual ABase {
int iMem;
};
class ABCDerived : public BBase, public CBase {
int iMem;
};
int main()
{
cout << "Int is :" << sizeof(int) <<endl;
cout << "Abase is :" << sizeof(ABase) << endl;
cout << "Abase is :" << sizeof(BBase) << endl;
cout << "Abase is :" << sizeof(CBase) << endl;
cout << "Abase is :" << sizeof(ABCDerived) << endl;
return 0;
}
Размеры ABase, BBase, CBase и ABCDerived: 4, 16, 16 и 40 соответственно.
Обычно из того, что я читаю, я ожидаю, что BBase и CBase будут равны 12 байтам (8 байтов для двух переменных типа int и 4 байта для vPtr). Но я получаю 16, даже если я предполагаю, что vPtr использует 8 байтов, почему ABCDerived имеет размер 40 байтов?
Инструмент OnlineGBD утверждает, что использует компилятор G ++ / C ++.
Я знаю аналогичные вопросы задавались на этом форуме ранее, но я не могу понять этот расчет размера.