Folgender Code:
#include < iostream >
#include < stdint.h >
using namespace std;
class Base {
public:
int32_t a;
};
class Derived : public Base {
public:
int32_t b;
};
class VirtualDerived : virtual public Base {
public:
int32_t c;
};
int main() {
cout << "sizeof Base " << sizeof(Base) << "\n";
cout << "sizeof Derived " << sizeof(Derived) << "\n";
cout << "sizeof VirtualDerived " << sizeof(VirtualDerived) << "\n";
return 0;
}
ergibt auf einer 32Bit Maschine folgende Ausgabe
sizeof Base 4 sizeof Derived 8 sizeof VirtualDerived 12
Die Größe der VirtualDerived Klasse ist also nicht einfach die Summer zweier 4Byte Variablen, sondern auch noch zusätzlich ein 4Byte Pointer auf die Base Klasse.
Auf einer 64Bit Maschine sind es entsprechend 16Byte
sizeof Base 4 sizeof Derived 8 sizeof VirtualDerived 16