Ich habe gehört, dass die Widgets auf dem Heap (unter Verwendung von new) zugewiesen werden sollen, und dann müssen sie nicht mehr gelöscht werden (das geschieht automatisch).
Ich bin mir nicht sicher, ob es wichtig ist, aber alle Widgets, die ich erstelle, haben ein Elternteil.
Das sagt:
Wenn parent 0 ist, wird das neue Widget ein Fenster. Wenn Eltern ein anderes Widget ist, Dieses Widget wird zu einem untergeordneten Fenster innerhalb des Elternteils. Das neue Widget ist gelöscht, wenn das übergeordnete Element gelöscht wird.
Es ist keine Magie involviert. Einfach gesagt, ein QObject löscht automatisch seine Kinder in seinem Destruktor. Solange also Ihr Widget einen Elternteil hat und Sie diesen Elternteil zerstören, müssen Sie sich keine Sorgen um die Kinder machen. Wenn Sie sich also gefragt haben, was dieser QObject * parent
-Parameter ist, nun, dafür ist er da.
Auch aus dem doc:
Alle untergeordneten Objekte werden gelöscht. Wenn eines dieser Objekte im Stapel oder global ist, stürzt Ihr Programm früher oder später ab.
Vermeiden Sie es daher, Eltern Objekte zu geben, die einem Stack zugeordnet sind.
Die Dokumente dazu sind hier . Der Grund dafür, dass sie am häufigsten auf dem Heap zugewiesen werden, besteht darin, Probleme zu vermeiden, die durch die Konstruktionsreihenfolge der Mitglieder des Objektbaums verursacht werden. Der Stack ist in Ordnung, solange Sie die Regeln befolgen, aber warum sollten Sie sich bemühen, wenn Sie eine zuverlässige Alternative haben?
Die Referenz @Etienne zitiert ist hier .
Tags und Links c++ qt memory-management