int *pun = &foo.at(0);
int *pdeux = &foo.at(1);
int *ptrois = &foo.at(2);
foo.erase(foo.begin() + 1);
Après erase(), *pdeux == 3.
Existe-t-il une solution pour qu'au momment ou erase() est invoqué,
pdeux pointe toujours vers 2 sachant que je ne peux pas réaffecter pun,
pdeux et ptrois explicitement ?
int *pun = &foo.at(0); int *pdeux = &foo.at(1); int *ptrois = &foo.at(2);
foo.erase(foo.begin() + 1);
Dans toutes les collections, après erase(), des pointeurs, des références et des itérateurs à l'élément effacé sont invalids. C'est difficile à concevoir comment ça pourrait être autrement ; comment maintenir un pointeur valid à quelque chose qui n'existe plus ?
J'ai comme une petite doute que tu dois revoir ta conception, parce que si ta conception exige des pointeurs à des objets inexistant, il y a un problème de base.
je me suis mal exprimé, en fait ce n'est pas un résultat défini dans pdeux qui m'intéresse, mais plutôt que ptrois continue de pointer vers l'espace mémoire ou est stocké 3. En fait, il me faudrait un containeur comme vector mais qui ne déplace pas tous les objets en mémoire quand on en manipule un.
James Kanze wrote:
On Mar 27, 10:44 pm, none <""none"@(none)"> wrote:
int *pun = &foo.at(0);
int *pdeux = &foo.at(1);
int *ptrois = &foo.at(2);
foo.erase(foo.begin() + 1);
Dans toutes les collections, après erase(), des pointeurs, des
références et des itérateurs à l'élément effacé sont invalids.
C'est difficile à concevoir comment ça pourrait être autrement ;
comment maintenir un pointeur valid à quelque chose qui n'existe
plus ?
J'ai comme une petite doute que tu dois revoir ta conception,
parce que si ta conception exige des pointeurs à des objets
inexistant, il y a un problème de base.
je me suis mal exprimé, en fait ce n'est pas un résultat défini dans
pdeux qui m'intéresse, mais plutôt que ptrois continue de pointer vers
l'espace mémoire ou est stocké 3.
En fait, il me faudrait un containeur comme vector mais qui ne déplace
pas tous les objets en mémoire quand on en manipule un.
int *pun = &foo.at(0); int *pdeux = &foo.at(1); int *ptrois = &foo.at(2);
foo.erase(foo.begin() + 1);
Dans toutes les collections, après erase(), des pointeurs, des références et des itérateurs à l'élément effacé sont invalids. C'est difficile à concevoir comment ça pourrait être autrement ; comment maintenir un pointeur valid à quelque chose qui n'existe plus ?
J'ai comme une petite doute que tu dois revoir ta conception, parce que si ta conception exige des pointeurs à des objets inexistant, il y a un problème de base.
je me suis mal exprimé, en fait ce n'est pas un résultat défini dans pdeux qui m'intéresse, mais plutôt que ptrois continue de pointer vers l'espace mémoire ou est stocké 3. En fait, il me faudrait un containeur comme vector mais qui ne déplace pas tous les objets en mémoire quand on en manipule un.