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
    bei

    delete 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


Anmelden zum Antworten