Seite 1 von 1

QMap - Items löschen

Verfasst: 20. November 2007 14:06
von Flachkoepper
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?

Verfasst: 20. November 2007 14:13
von zwutz
ähm...

Code: Alles auswählen

map.clear();
sollte ausreichen...

Verfasst: 20. November 2007 14:20
von dhcase
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.

Verfasst: 20. November 2007 14:44
von Flachkoepper
map.clear();
sollte ausreichen...
Aber dabei wird doch der Speicherplatz nicht freigeräumt, oder?

qDeleteAll kannte ich noch nicht. Danke!

Verfasst: 20. November 2007 15:30
von Christian81
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.