[C++] Was ist Iterator-Invalidierung?


Answers

Iterator-Invalidation ist, was passiert, wenn ein Iterator-Typ (ein Objekt, das die Operatoren ++ und * ) den Zustand des Objekts, das er iteriert, nicht korrekt darstellt . Beispielsweise:

int *my_array = new int[15];
int *my_iterator = &my_array[2];

delete[] my_array;

std::for_each(my_iterator, my_iterator + 5, ...); // invalid

Dies führt zu undefiniertem Verhalten, da der Speicher, auf den er verweist, vom Betriebssystem zurückgewonnen wurde.

Dies ist jedoch nur ein Szenario, und viele andere Dinge führen dazu, dass ein Iterator "ungültig gemacht" wird, und Sie müssen sorgfältig die Dokumentation der Objekte überprüfen, die Sie verwenden.

Question

Ich sehe es viel referenziert, aber keine klare Antwort darauf, was genau es ist. Meine Erfahrung ist mit höheren Sprachen, so dass mir das Vorhandensein von Invalidität in einem Sammlungsrahmen unbekannt ist.

Was ist Iterator-Invalidierung?

Warum kommt es auf? Warum ist es schwierig, damit umzugehen?