so-eine-vererbungs-geschichte.
-
Jester schrieb:
Wie wär's im Destruktor der Basisklasse?
Das funktioniert allerdings nur wie gewünscht, wenn flush selbst nicht virtuell ist. Andernfalls hilft eine benannte Destruktionsfunktion nach dem Template-Method-Pattern.
Grob:class Base { public: void destroy() { flush(); delete this; } protected: virtual ~Base(); virtual void flush() = 0; };
-
hi,
sorry, ic versteh's nicht. was soll ich jetzt damit machen? destroy() in ~Base() aufrufen?
-
Ist die flush() Funktion eine Elementfunktion oder eine Nichtelementfunktion?
mfg.
-
joomoo schrieb:
Ist die flush() Funktion eine Elementfunktion oder eine Nichtelementfunktion?
mfg.
eine member-funktion. (muss virtuell sein, so wie's HumeSikkins skizziert hat)
-
bärnd schrieb:
joomoo schrieb:
Ist die flush() Funktion eine Elementfunktion oder eine Nichtelementfunktion?
mfg.
eine member-funktion. (muss virtuell sein, so wie's HumeSikkins skizziert hat)
Dann meint er glaub ich, dass du die destroy() funktino in den destruktoren der abgeleiteten klassen aufrufen sollst.
mfg.
-
aber dann kann ich doch auch gleich flush() aufrufen

-
Ich denke mal du sollst alle Objekte mit new anlegen und mit destroy wieder zerstören.
-
Nein man du sollst das Objekt dynamisch anlegen und dann mit der Methode destroy löschen.
-
???????????

-
aaa schrieb:
Nein man du sollst das Objekt dynamisch anlegen und dann mit der Methode destroy löschen.
ach so. ok. aber ich sehe immer noch nicht die eleganz dieser lösung...