Seite 1 von 1

foreach oder Iteratoren - Verständnisfrage

Verfasst: 28. Juni 2009 00:54
von taraquedo
Hallo!

Ich bin auf dem Weg viele meiner QMap<foo, Klasse*> Konstrukte durch QMap<foo, Klasse> zu ersetzen um mir die Arbeit mit den Zeigern zu ersparen und dadurch vielleicht ein fehlerunanfälligeres Programm zu erlangen. Sprich: Qt scheint die Sache mit den Zeigern prima selbst zu lösen. Aber bei einer Stelle entdecke ich ein Rätsel (siehe Kommentare im Code):

Code: Alles auswählen

// Ruft immer den Destruktor auf
foreach (Klasse klasse, myMap)
	{ someCodeOrJustASemicolon; }
// Ruft den Destruktor niemals auf
QMapIterator<foo, Klasse> i(myMap);
while (i.hasNext())
{
	i.next();
}
Also warum verhält sich Qt so? Mal wird der Destruktor aufgerufen, mal nicht.

Grüße!

Verfasst: 28. Juni 2009 12:49
von FaS
Weil

Code: Alles auswählen

foreach (Klasse klasse, myMap)
synonym ist für

Code: Alles auswählen

for( Klasse klasse = erstes element; usw; blabla )
Also vom Gedanken her. Es wird also in jedem Schleifendurchgang ein Element aus dem Container in klasse hineinkopiert und hinterher gelöscht, da du es nunmal explizit so hingeschrieben hast. Versuch

Code: Alles auswählen

foreach (Klasse &klasse, myMap)
Gruß,
FaS