foreach oder Iteratoren - Verständnisfrage

Verschiedenes zu Qt
Antworten
taraquedo
Beiträge: 36
Registriert: 1. März 2007 13:07

foreach oder Iteratoren - Verständnisfrage

Beitrag 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!
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag 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
Antworten