Alles rund um die Programmierung mit Qt
Flachkoepper
Beiträge: 149 Registriert: 11. Januar 2005 12:14
Wohnort: Hannover
Beitrag
von Flachkoepper » 20. November 2007 14:06
Moin,
ich hab eine QMap<int, MyClass*>. Um sie vollständig zu leeren und dabei den Speicher freizugeben, mache ich folgendes:
Code: Alles auswählen
foreach(int i, map.keys() ) {
if( map.contains(i) )
delete map.take(i);
}
Ist das korrekt?
zwutz
Beiträge: 14 Registriert: 20. November 2007 09:13
Beitrag
von zwutz » 20. November 2007 14:13
ähm...
sollte ausreichen...
dhcase
Beiträge: 132 Registriert: 10. Juni 2006 20:38
Beitrag
von dhcase » 20. November 2007 14:20
es gibt auch noch qDeleteAll()... aus Porting Qt3 to Qt4, ist zwar für QList hilft vielleicht trotzdem:
Code: Alles auswählen
while (!list.isEmpty())
delete list.takeFirst();
In 99% of cases, the following idiom also works:
qDeleteAll(list);
list.clear();
However, it may lead to crashes if list is referenced from the value type's destructor, because list contains dangling pointers until clear() is called.
Flachkoepper
Beiträge: 149 Registriert: 11. Januar 2005 12:14
Wohnort: Hannover
Beitrag
von Flachkoepper » 20. November 2007 14:44
map.clear();
sollte ausreichen...
Aber dabei wird doch der Speicherplatz nicht freigeräumt, oder?
qDeleteAll kannte ich noch nicht. Danke!
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 20. November 2007 15:30
Flachkoepper hat geschrieben: map.clear();
sollte ausreichen...
Aber dabei wird doch der Speicherplatz nicht freigeräumt, oder?
richtig erkannt. deshalb reicht ein map.clear() hier nicht.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung