dire que j'ai un objet:pointeurs vers des éléments dans un récipient
struct Foo
{
int bar_;
Foo(int bar) bar_(bar) {}
};
et je suis un conteneur STL qui contient Foo
s, peut-être un vecteur, et je prendre
// Elsewhere...
vector<Foo> vec;
vec.push_back(Foo(4));
int *p = &(vec[0].bar_)
Ceci est un idée terrible, non? La raison est que vector
va stocker ses éléments dans un tableau alloué dynamiquement quelque part, et éventuellement, si vous ajoutez suffisamment d'éléments, il devra allouer un autre tableau, copier tous les éléments du tableau original, et supprime l'ancien tableau. Après cela se produit, p
points à la poubelle. C'est pourquoi de nombreuses opérations sur un vector
invalideront les itérateurs.
Il semble que ce serait raisonnable de supposer qu'une opération qui invaliderait itérateurs d'un conteneur invalidera également des pointeurs vers des membres de données d'éléments de conteneurs, et que si une opération ne pas itérateurs d'invalidation, ces pointeurs toujours être en sécurité. Cependant, de nombreuses hypothèses raisonnables sont fausses. Est-ce l'un d'entre eux?
@Brian: Je pense que Pillsy est correcte en sémantique, sinon en syntaxe. – quamrana