Destruktoraufruf in Komposition.
-
Hallo Leute,
ich hab gerade ein Verständnisproblem und hoffe ihr könnt mir da weiterhelfen.Beispiel (Pseudocode):
class A { public: A() { stream = open("video.avi"); } ~A() { close(&stream); } private: Cvideostream* stream; } class B { public: B() { videoObjekt(); } ~B() { videoObjekt.~A(); } private: A videoObjekt; }Frage 1:
Die Klasse B enthält ein Member der Klasse A, muss ich im Destruktor der Klasse B den Destruktor der Klasse A aufrufen ? Das dürfte doch eigentlich nicht notwendig sein da dieser automatisch aufgerufen wird !?!Frage 2:
Wenn ich ein Objekt der Klasse B in meinem Programm nutze und dieses nicht auf dem Heap anlege, muss ich dennoch den Destruktor vor Programmende aufrufen, oder geschieht das ebenfalls automatisch?Sorry für diese pillepalle Fragen. Ich komme momentan aber leider auf keinen grünen Zweig, sollte wahrscheinlich mal wieder ne Pause einlegen
.
-
Schon mal selbst ausprobiert? Einfach mal ein print-Statement in den Destruktor schreiben.
-
andi0815 schrieb:
Hallo Leute,
ich hab gerade ein Verständnisproblem und hoffe ihr könnt mir da weiterhelfen.Beispiel (Pseudocode):
class A { public: A() { stream = open("video.avi"); } ~A() { close(&stream); } private: Cvideostream* stream; } class B { public: B() { videoObjekt(); } ~B() { videoObjekt.~A(); } private: A videoObjekt; }Frage 1:
Die Klasse B enthält ein Member der Klasse A, muss ich im Destruktor der Klasse B den Destruktor der Klasse A aufrufen ? Das dürfte doch eigentlich nicht notwendig sein da dieser automatisch aufgerufen wird !?!Frage 2:
Wenn ich ein Objekt der Klasse B in meinem Programm nutze und dieses nicht auf dem Heap anlege, muss ich dennoch den Destruktor vor Programmende aufrufen, oder geschieht das ebenfalls automatisch?Sorry für diese pillepalle Fragen. Ich komme momentan aber leider auf keinen grünen Zweig, sollte wahrscheinlich mal wieder ne Pause einlegen
.class Beispiel { AnotherClass blub; // Destruktor wird automatisch aufgerufen }; class Beispiel2 { AnotherClass *blub; Beispiel2() { blub = new AnotherClass(); } ~Beispiel2() { delete blub; // Destruktor von AnotherClass wird durch delete aufgerufen und __NICHT__ automatisch } };
-
, Danke!