Hallo miteinander,
ich konnte der Qt-Dokumentation bisher nicht entnehmen, ob eine QList mit Pointern diese eigentlich "voll" besitzt, d.h. auch die Objekte löscht, wenn sie selber gelöscht wird. Ein Test meinerseits schuf Klarheit: ja, sie werden gelöscht.
Was ich mich aber dennoch frage: Nehmen wir an ich entnehme der Liste einige Pointer und speichere sie in eine andere QList. Nun lösche ich diese neue QList. Werden dann die Pointer in der alten QList ungültig????
Ein erneuter Test zeigte: nein, die Pointer werden nicht ungültig.
Meiner Ansicht nach ist das aber ein Widerspruch zum ersten Testergebnis!
Also wie verhält sich QList denn nun wirklich per Definition????
Grüße,
Julian S.
QList - wer ist für die Löschung verantwortlich?!
Prinzipiell: Die Objekte in einer Liste (ob QList, QVector, std::vector, ..) werden zerstört. Immer! Bei normalen Values bedeutet das, dass der jeweilige Destruktor aufgerufen wird. Und bei einem Pointer heißt es, dass der Pointer zerstört wird - aber nicht das Objekt auf das er zeigt! Auch Pointer sind nur Objekte, die einen Wert haben - die Adresse des Objektes, auf das sie zeigen. Mach dir das klar.
Dein "komisches" Verhalten, dass deine Pointer zerstört werden (sprich du eine Ausgabe des Destruktors siehst) kann ich mir so erklären:
Entweder du verschweigst uns, dass es Pointer auf QObjects sind, die selber wieder children eines Über-QObjects sind, und bei dessen Zerstörung automatisch mitzerstört werden.
Oder du legst Objekte auf dem Stack an und legst dann per Adressoperator einen Zeiger auf das Objekt in die Liste.
Also: Zeig uns dein Testprogramm und wir sagen dir was du falsch machst
Dein "komisches" Verhalten, dass deine Pointer zerstört werden (sprich du eine Ausgabe des Destruktors siehst) kann ich mir so erklären:
Entweder du verschweigst uns, dass es Pointer auf QObjects sind, die selber wieder children eines Über-QObjects sind, und bei dessen Zerstörung automatisch mitzerstört werden.
Oder du legst Objekte auf dem Stack an und legst dann per Adressoperator einen Zeiger auf das Objekt in die Liste.
Also: Zeig uns dein Testprogramm und wir sagen dir was du falsch machst