Wann deleteLater

Vorausgesetzt, ich habe Folgendes snippet, ist es sicher zu nennen, deleteLater in qto der Destruktor für andere QT-Objekte, die es möglicherweise verwalten?

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyQTObject qto;
    qto.show();
    return a.exec();
}

Da habe ich analysiert ähnlicher code wie dieser mit einem Leck-Detektor und alle Objekte, für die deleteLater genannt wurde, waren nicht freigegeben, richtig, es sei denn, ich ersetzte Sie den Anruf mit einer normalen löschen.
Wenn ich das richtig verstanden hab, deleteLater registriert nur ein Ereignis löschen in der QT message queue. Kann dies das problem sein, dass qto der Destruktor aufgerufen wird am Ende von main-Gültigkeitsbereich in der Erwägung, dass die QT-message-Schleife bereits endet mit der Rückgabe aus.exec? Also das löschen-Ereignis nie verarbeitet werden, in der Tat nicht einmal geschoben, in eine message-queue, da es keines gibt?

  • Sie nicht brauchen, deletelater auf qto. es ist auf den stack. Btw analyzer can-report von false-positives.
  • die Frage, die fragt, ob es sicher ist zu nennen, deleteLater...für ANDERE QT-Objekt, es könnte zu verwalten, nicht für qto selbst.
  • Dies ist ganz einfach zu testen. Setzen Sie einfach einige debug-Meldungen in den Destruktor und sehen, wenn Sie auftauchen. Sie werden feststellen, dass Sie nicht. Gibt es einen Grund, diese Objekte sind keine Kinder von qto?
InformationsquelleAutor user1709708 | 2014-03-13
Schreibe einen Kommentar