Destructor-Frage für Qt



  • Eine c++-Frage: ich habe bei Qt nicht die wirkliche Bedeutung
    des ~Destructors verstanden: muss ich diesen definieren, und wenn ja, was muss er enthalten ?
    Welche Elemente der Klasse muss ich darin explizit löschen ?

    Beispiel:

    class Tmeldung : public QDialog
    {
    Q_OBJECT
    public:
    Tmeldung(QWidget* parent = 0, const char* name = "meldung", bool modal = TRUE, WFlags f = 0 );
    ~Tmeldung() {}

    QLabel *mlab;
    QPushButton *ok;

    protected slots:
    void fertig();
    };

    Muss ich ~Tmeldung definieren ? Oder wird dies automatisch abgeleitet von ~QDialog ?

    Falls ich es selbst schreiben muss: was muss darin stehen ?



  • malabarista schrieb:

    Eine c++-Frage: ich habe bei Qt nicht die wirkliche Bedeutung
    des ~Destructors verstanden: muss ich diesen definieren, und wenn ja, was muss er enthalten ?
    Welche Elemente der Klasse muss ich darin explizit löschen ?

    Beispiel:

    class Tmeldung : public QDialog
    {
    Q_OBJECT
    public:
    Tmeldung(QWidget* parent = 0, const char* name = "meldung", bool modal = TRUE, WFlags f = 0 );
    ~Tmeldung() {}

    QLabel *mlab;
    QPushButton *ok;

    protected slots:
    void fertig();
    };

    Muss ich ~Tmeldung definieren ? Oder wird dies automatisch abgeleitet von ~QDialog ?

    Falls ich es selbst schreiben muss: was muss darin stehen ?

    Normalerweise musst du keinen Destruktor schreiben, auch wenn du mit new einen QLabel und QPushButton anlegst und diese beim Dialog registriert. Dann übernimmt Qt das Löschen der Elemente.

    Ansonsten musst du einen Destruktor wie bei anderen Programmen dann schreiben, wenn du Ressourcen hast, die wieder freigegeben werden müssen.

    Qt selbst verlangt keinen speziellen Destruktor.



  • alle QXxx-klassen die du mit new erzeugst und irgend einem QWidget bekannt machst brauchst du nicht deleten, das übernimmt dann das widget.
    wenn du aber zB ein dynamisches array verwendest was bis zum löschen des objektes bestehen soll, brauchst du natürlich einen destructor um den speicher wieder freizugeben.



  • OK.
    Muss ich aber trotzdem den Destructor ~Tmeldung aufführen oder kann ich den ganz weglassen (wenn ich ihn sowieso nicht brauche) ?



  • wenn du ihn nicht brauchst kannsten weglassen.



  • danke !


Anmelden zum Antworten