Organisation der Variablen im Speicher bei Vererbung
- 
					
					
					
					
 Hallo zusammen, struct Bar { int x; int y; }; class Foo : public Bar { int z; };Ist hier garantiert das die Variablen x und y im Speicher vor der Variable z liegen? Ich wollte nämlich im Foo-Konstruktor mit memset die Bar-Membervariablen auf 0 setzen. memset(this, 0, sizeof(Bar));Jetzt wollte ich mir sicher gehen, das dabei keine Variablen von der Klasse Foo überschrieben werden (die ich über die Initialisierungsliste initialisiere, also vor dem memset). Die Bar-Struktur ist vorgegeben und dort kann ich keinen Konstruktor einfügen. 
 
- 
					
					
					
					
 Ich weiß jetzt zwar nicht was du genau vor hast, aber ich schätze Vererbung ist hier fehl am Platz. Gib der Foo-Klasse lieber Bar als Member. 
 
- 
					
					
					
					
 Ist hier garantiert das die Variablen x und y im Speicher vor der Variable z liegen? Nein. Die Reihenfolge von Membern ist innerhalb *einer* Klasse immer nur innerhalb *eines* Access-Levels vorgeschrieben. Ich wollte nämlich im Foo-Konstruktor mit memset die Bar-Membervariablen auf 0 setzen. Keine gute Idee. 
 
- 
					
					
					
					
 würde das eigentlich funktionieren: Foo::Foo() : z(0) { memset(static_cast<Bar*>(this), 0, sizeof(Bar)); }? 
 Schließlich ist das Bar-Subobjekt ein POD.