2016-05-30 4 views
-4

Ich habe diesesWarum ist die Größe einer Klasse mit nur einem char 8, wenn es virtuell erbt?

class Empty {}; // Empty class 

class Derived : virtual public Empty 
{ 
     char c; 
}; 

Auf meinem Rechner sizeof(Derived); ist 8, warum? Soll es nicht 1 sein, weil es nur 1 char drin hat? Wenn ich die virtuelle Vererbung entferne, lautet sizeof(Derived);1.

+1

Uh der Compiler tut es. Kannst du die Frage klären? – Flexo

+1

Was ist das Ergebnis und was erwarten Sie und warum? Versuchen Sie zumindest, diese Frage selbst zu lösen! –

+1

hast du irgendeine [Dokumentation] (http://en.cppreference.com/w/cpp/language/sizeof) gelesen? Was ist unklar? – Default

Antwort

6

Auf meinem Computer ist sizeof(Derived); 8, warum?

Weil das der Compiler gewählt hat. Die Darstellung des Objekts benötigt aufgrund der virtuellen Basis möglicherweise mehr Speicher. In einer typischen Implementierung wird es einen "virtuellen Tabellenzeiger" innerhalb des Objekts geben.

Soll es nicht 1 sein, weil es nur 1 char enthält?

Nein, die Größe eines Objekts nicht „soll als“ die Summe der Größe seiner Mitglieder.

Verwandte Themen