QT destruktor
-
als Beispiel nahme ich QDialog:
in Qt(egal welche Version) ist Destruktor von einer Klasse nicht als virtual definiert
hier~QDialog ();dann haben wir problem, wenn wir eigene Klasse von QDialog ableiten
class myDialog : public QDialog { }in main.cpp
QDialog *d = new myDialog(); delete d;zwar Destruktor von QDialog wird aufgerufen, aber Destruktor von MyDialog wird nie aufgerufen, dann haben wir ein Zombie im Speicher.
Ich verstehe nicht, wieso hat trolltech so einen Fehler begangen?
-
und wenn ich so definiere
myDialog *m = new myDialog(); delete m;das Ergebnis ist dasselber.
Es wird 2 mal Konstruktor aufgerufen, 1 für Base Class, 1 für abgeleitete Class
beidelete m;wird obj von der abgeleiteten Class gelöscht, aber was ist mit das Object von Base Class?
-
QDialog's Basisklasse ist QObject, dessen Destruktor virtuell ist. Dadurch ist der Destruktor in QDialog ebenfalls virtuell.
Tommi
-
verstehe, danke dir