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.