PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT: Speicher wieder freigeben?


eXistence
2005-09-19, 15:19:35
hi,
ich wurschtel mich gerade in QT rein und habe mal eine recht grundlegende Frage.
Folgendes Programm habe ich mal aus meinem QT-Buch ("Programming with QT", OReilly-Verlag) abgetippt:

#include <qapplication.h>
#include <qlabel.h>

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

QLabel* mylabel = new QLabel( "Hello World", 0 );
mylabel->resize( 120, 30 );

myapp.setMainWidget( mylabel );
mylabel->show();
return myapp.exec();
}

In der QT-Doku habe ich noch mehr Beispiele dieser Art gefunden und ich frage mich, wo wird der Speicher wieder freigegeben, der mit new reserviert wurde!?

Aqualon
2005-09-19, 16:32:26
Bei den einfachen Beispielen wohl erst, wenn du das Programm beendest. Das QLabel brauchst du ja solange, wie die Anwendung läuft, von daher kannst du sowieso kein delete durchführen.

Inwieweit QT einem das delete auf per new erzeugte Objekte automatisch in bestimmten Situationen abnimmt, weiß ich allerdings auch nicht.

Aqua

Gast
2005-09-19, 20:27:13
also uns wurde es so gesagt, das QT schon weiß, wann etwas nicht mehr gebraucht wird, und den speicher schon selbst freigeben wird (irgendwann sicher)

marco42
2005-09-20, 15:24:19
hi,
ich wurschtel mich gerade in QT rein und habe mal eine recht grundlegende Frage.
Folgendes Programm habe ich mal aus meinem QT-Buch ("Programming with QT", OReilly-Verlag) abgetippt:

#include <qapplication.h>
#include <qlabel.h>

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

QLabel* mylabel = new QLabel( "Hello World", 0 );
mylabel->resize( 120, 30 );

myapp.setMainWidget( mylabel );
mylabel->show();
return myapp.exec();
}

In der QT-Doku habe ich noch mehr Beispiele dieser Art gefunden und ich frage mich, wo wird der Speicher wieder freigegeben, der mit new reserviert wurde!?

Qt verwaltet das intern und loescht das selber, wenn du zB das parent widget loescht. Lies mal die Doku ueber QObject trees durch.
Mit myapp.setMainWidget( mylabel ); uebernimmt also Qt die Verwaltung.