Zeiger auf Map Element
-
Hallo,
ich habe eine Map map<int, FooData> myMap. Da adde ich jetzt Daten rein und speichere mir einen Zeiger auf ein Element:
FooData* ptr = &myMap[index];
Wenn ich jetzt weitere Daten in die Map adde, ist dann sichergestellt, dass der Zeiger ptr gueltig bleibt und aufs selbe Objekt zeigt?
-
Zeigerfreund schrieb:
Wenn ich jetzt weitere Daten in die Map adde, ist dann sichergestellt, dass der Zeiger ptr gueltig bleibt und aufs selbe Objekt zeigt?
Jein. Es ist sichergestellt, dass iteratoren nicht invalidiert werden. Da die intern wohl auch nichts anderes als Pointer haben und ein insert() nicht weiß, welche Iteratoren so in der Welt reumlaufen und sie daher nicht ändern kann, müssen die Pointer wohl auch gültig bleiben. Soweit ich weiß sagt der Standard aber nichts explizites über pointer auf values. Um 100%ig korrekt zu bleiben könntest du also besser Iteratoren speichern:
map<int, FooData>::iterator = myMap.find(index); /* ... */Hat außerdem den Vorteil, dass, wenn index noch garnicht als index in der map existiert, er auch nicht hinzugefügt wird.