Müssen QWidgets auf dem Heap von Hand freigegeben werden?
-
Ich lese gerade das offizielle Qt-Buch, dabei verfolgt mich eine Frage schon seit den ersten Seiten, die sich bisher auch noch nicht geklärt hat. Ich bin mir zwar über die Baumstruktur von QWidgets und der damit verbundenen automatischen Resourcenfreigabe im klaren, allerdings wurde dann an einer Stelle dieser Code präsentiert:
void MainWindow::newFile() { MainWindow *mainWin = new MainWindow; mainWin->show(); }
Kommentiert wurde das sinngemäß damit, dass man den Zeiger verwerfen kann, weil Qt sich die Adresse merkt (und es bei Programmende entsprechend freigibt). Meine Frage lautet nun: gilt das allgemein für QWidgets, oder nur für QMainWindow (wovon MainWindow schließlich erbt). Mich würde auch interessieren, wie das (in etwa) funktioniert.
Danke!
-
normalerweise wird am ende des programms immer sämtlicher speicher freigegeben.
ich hab mal im mainwindow-code geschaut und kein indiz gefunden, welches darauf hindeuetet, dass der speicher einer mainwindow-instanz mit dem schließen automatisch freigegeben würde.
also geht das auch nur automatisch, wenn ein parent existiert, und dieses gelöscht wird...wenn du sowas automatisch machen willst, kannst du z.B. closeEvent() implementieren (hideEvent ist bissl riskant ;)), und da einfach ein deleteLater(); reinschreiben.In der nächsten runde der eventloop wird dann automatisch der speicher freigegeben.
aber dann nicht wundern, wenn du das ding noch brauchst, und plötzlich ein segfault entsteht.
in dem angegebenen beispiel sollte es aber echt kein problem geben.grüße
franz
-
starte die Anwendung mit dem Parameter
-widgetcount
.Dann wird dir nach Programmende eine kleine Übersicht dargestellt, wie viele Widgets maximal gleichzeitig aktiv waren und außerdem, wie viele nicht zerstört wurden. Idealerweise sollte die Zahl 0 sein...