std::vector<eigene Klasse> : Destruktor von eigene Klasse?
-
Hallo Forum,
wenn ich eine Klasse CEigeneKlasse habe, und diese in einem Vektor verwende (std::vector<CEigeneKlasse>), wird dann beim Verlassen des Gültigkeitsbereichs dieses Vektors jeder einzelner Destruktor der Objekte des Typs CEigeneKlasse aufgerufen?
Vielen Dank!
-
JA
Nur wenn du Pointer auf deinen Klasse in den Vektor steckst musst du selbst
wieder "wegräumen".
-
D.h. also in folgendem Beispiel
class CEigeneKlasse { public: CEigeneKlasse() { m_pnAnz = new int; }; ~CEigeneKlasse() { delete m_pnAnz; }; private: int *m_pnAnz; }; int main(...) { std::vector<CEigeneKlasse> test; test.push_back( CEigeneKlasse() ); test.push_back( CEigeneKlasse() ); }werden die Destruktoren beider erzeugter Objekte aufgerufen und damit der int-Pointer jedesmal deleted und es gibt keine memory leaks?
-
atlastraeger schrieb:
werden die Destruktoren beider erzeugter Objekte aufgerufen und damit der int-Pointer jedesmal deleted und es gibt keine memory leaks?
Das dürfte sehr schnell abstürzen, weil du keinen Copykonstruktor hast, bzw. weil der vom Compiler automatisch generierte nicht das Richtige tut.
-
Okay, d.h. also nach Hinzufügen eines copy constructor, der dafür sorgt, dass jedes Objekt seinen eigenen Pointer samt Inhalt kriegt, funktioniert's ?
-
Ein Zuweisungsoperator wäre wohl auch nicht verkehrt. Aber dann sollte es klappen

-
atlastraeger schrieb:
Okay, d.h. also nach Hinzufügen eines copy constructor, der dafür sorgt, dass jedes Objekt seinen eigenen Pointer samt Inhalt kriegt, funktioniert's ?
ja.