Frage zu delete
-
class KlasseEins{ private: Medium* item; ... public: ... fried class KlasseZwei; }; class KlasseZwei{ private: KlasseEins* current; ... };Hallo!
item und current werden jeweils mit new angelegt. Medium ist eine Klasse.
Wenn ich innerhalb von KlasseZwei "delete current;" schreibe, wird dann auch automatisch der Destruktor für Medium aufgerufen?
-
item und current werden jeweils mit new angelegt. Medium ist eine Klasse.
Wenn ich innerhalb von KlasseZwei "delete current;" schreibe, wird dann auch automatisch der Destruktor für Medium aufgerufen?Nein. Dazu musst Du im DTOR von KlasseEins noch ein delete item; hinschreiben.
Simon
-
Hi,
Allgemein gilt immer: Wenn ein Objekt zerstört wird, wird dessen Destruktor aufgerufen - in diesem Fall also der Destruktor von KlasseEins.
Wenn der wiederum ein delete auf item durchführt (was er sollte, item "sein Objekt" ist), wird auch dessen Destruktor aufgerufen.
Sonst nicht...Ich halte es für wichtig, klare "Besitzverhältnisse" zu haben: Wer ein Objekt erzeugt, der löscht es auch wieder ... und niemand sonst.
Gruß,
Simon2.
-
Smart Pointer wären ev. auch zu gebrauchen.
Simon
-
Simon2 schrieb:
Allgemein gilt immer: Wenn ein Objekt zerstört wird, wird dessen Konstruktor aufgerufen - in diesem Fall also der Konstruktor von KlasseEins.
Konstruktor???
-
jencas schrieb:
Simon2 schrieb:
Allgemein gilt immer: Wenn ein Objekt zerstört wird, wird dessen Konstruktor aufgerufen - in diesem Fall also der Konstruktor von KlasseEins.
Konstruktor???
Nein, Destruktor.

-
jencas schrieb:
Simon2 schrieb:
Allgemein gilt immer: Wenn ein Objekt zerstört wird, wird dessen Konstruktor aufgerufen - in diesem Fall also der Konstruktor von KlasseEins.
Konstruktor???
Destruktor. Aber nicht bei primitiven Typen und Arrays davon.
-
C++Fan 2009 schrieb:
Destruktor. Aber nicht bei primitiven Typen und Arrays davon.
Auch nicht bei PODs.
Man sollte auch dran denken, Zuweisungsoperator und Kopierkonstruktor sinnvoll zu implementieren (oder zu verbieten), wenn man dynamischen Speicher verwaltet.
-
Hi,
danke an alle, die aufgepasst haben: Ja - ich meinte den DEstruktor .... und weiß auch nicht, warum ich "KON" geschrieben habe.
C++Fan 2009 schrieb:
...Aber nicht bei primitiven Typen und Arrays davon.
Du meinst, bei Typen, die keinen Destruktor haben?
Oh - da ist es natürlich sehr erstaunlich, dass keiner aufgerufen wird.
Gruß,
Simon2.