2010-07-16 14 views
9

Was sind die Lebensdauern von Qt Objects?Lebensdauer von Qt-Objekten

wie:

QTcpSocket *socket=new QTcpSocket(); 

Wenn Buchse zerstört werden? Sollte ich

Gibt es einen Unterschied mit:

QTcpSocket socket; 

ich nicht tief infromation darüber finden konnte, jeder Kommentar oder Link wird begrüßt.

Antwort

11

Qt verwendet Eltern-Kind-Beziehungen, um Speicher zu verwalten. Wenn Sie beim Erstellen das Objekt mit einem übergeordneten Objekt versehen, kümmert sich das übergeordnete Objekt darum, es zu bereinigen. Das übergeordnete Element kann beispielsweise das GUI-Fenster sein, das den Socket verwendet. Sobald das Fenster stirbt (d.h. geschlossen ist), stirbt die Buchse.

Sie können ohne die Eltern tun, aber in der Tat müssen Sie das Objekt manuell.

Persönlich empfehle ich, bei idiomatischen Qt zu bleiben und alle Objekte in Eltern-Kind-Bäume zu verknüpfen.

9

Objekte, die mit new zugewiesen sind, müssen mit delete freigegeben werden.

Mit Qt können die meisten Objekte jedoch ein Parent haben, das Sie als Argument für den Konstruktor angeben. Wenn das übergeordnete Element gelöscht wird, werden die untergeordneten Objekte automatisch gelöscht.

+0

Wenn versuchen, zu löschen, erhalte ich Laufzeitfehler (über Versuch, auf privates Mitglied in QHostAddress zuzugreifen) – metdos

+0

Zugriff des privaten Mitglieds wird nicht zur Laufzeit nur während des Kompilierens überprüft. Vielleicht ist es ein Unfall? Dann wird Ihr Objekt wahrscheinlich zweimal gelöscht. –

2

Wenn Sie aus irgendeinem Grund kein Parent übergeben möchten (da es kein QObject gibt, bei dem es sinnvoll ist, das Socket-Objekt zu besitzen), können Sie auch einen QSharedPointer verwenden, um die Lebensdauer zu verwalten.