Dans diverses parties de mon code, j'utilise GetConfig et récupère ainsi
l'adresse d'un élément de Tab, vérifiant mon critère, et que je stocke
dans Config *pBidule;
Le problème, c'est que pendant ce temps, Tab peut être redimensionné et
mon pointeur pBidule devient invalide.
A part le récupérer à nouveau, est-ce qu'il y a d'autres possibilités?
J'ai pensé à remplacer mon tableau par vector<Config *> Tab, n'ayant
ainsi plus le problème évoqué, vu que j'ai les pointeurs sur les Config
crées à l'aide de new.
Mais cela ne me convient pas trop, cela me semble assez lourd en fait.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Falk Tannhäuser
JM schrieb:
class Gestion { vector<Config> Tab Config *GetConfig(critère) }
Je fais diverses insertions, intialisations...
Dans diverses parties de mon code, j'utilise GetConfig et récupère ainsi l'adresse d'un élément de Tab, vérifiant mon critère, et que je stocke dans Config *pBidule;
Le problème, c'est que pendant ce temps, Tab peut être redimensionné et mon pointeur pBidule devient invalide.
A part le récupérer à nouveau, est-ce qu'il y a d'autres possibilités?
Utilise std::list à la place de std::vector - les pointeurs et itérateurs restent alors valides si on insère ou supprime des éléments (sauf s'il pointent sur l'élément supprimé, bien sûr).
Autre solution : Si tu veux garder std::vector, stocke l'indice de l'élément en question plutôt qu'un pointeur - il restera valide en cas de rédimensionnement (à moins que tu insères ou supprimes quelque chose avant, ce qui décale le reste).
Falk
JM schrieb:
class Gestion
{
vector<Config> Tab
Config *GetConfig(critère)
}
Je fais diverses insertions, intialisations...
Dans diverses parties de mon code, j'utilise GetConfig et récupère ainsi
l'adresse d'un élément de Tab, vérifiant mon critère, et que je stocke
dans Config *pBidule;
Le problème, c'est que pendant ce temps, Tab peut être redimensionné et
mon pointeur pBidule devient invalide.
A part le récupérer à nouveau, est-ce qu'il y a d'autres possibilités?
Utilise std::list à la place de std::vector - les pointeurs et
itérateurs restent alors valides si on insère ou supprime des éléments
(sauf s'il pointent sur l'élément supprimé, bien sûr).
Autre solution : Si tu veux garder std::vector, stocke l'indice de
l'élément en question plutôt qu'un pointeur - il restera valide en cas
de rédimensionnement (à moins que tu insères ou supprimes quelque chose
avant, ce qui décale le reste).
class Gestion { vector<Config> Tab Config *GetConfig(critère) }
Je fais diverses insertions, intialisations...
Dans diverses parties de mon code, j'utilise GetConfig et récupère ainsi l'adresse d'un élément de Tab, vérifiant mon critère, et que je stocke dans Config *pBidule;
Le problème, c'est que pendant ce temps, Tab peut être redimensionné et mon pointeur pBidule devient invalide.
A part le récupérer à nouveau, est-ce qu'il y a d'autres possibilités?
Utilise std::list à la place de std::vector - les pointeurs et itérateurs restent alors valides si on insère ou supprime des éléments (sauf s'il pointent sur l'élément supprimé, bien sûr).
Autre solution : Si tu veux garder std::vector, stocke l'indice de l'élément en question plutôt qu'un pointeur - il restera valide en cas de rédimensionnement (à moins que tu insères ou supprimes quelque chose avant, ce qui décale le reste).
Falk
JM
Utilise std::list à la place de std::vector - les pointeurs et itérateurs restent alors valides si on insère ou supprime des éléments (sauf s'il pointent sur l'élément supprimé, bien sûr).
J'avais un doute, merci
Autre solution : Si tu veux garder std::vector, stocke l'indice de l'élément en question plutôt qu'un pointeur - il restera valide en cas de rédimensionnement (à moins que tu insères ou supprimes quelque chose avant, ce qui décale le reste).
Oui, c'est pour cela que finalement j'ai abandonné mon tableau
Utilise std::list à la place de std::vector - les pointeurs et
itérateurs restent alors valides si on insère ou supprime des éléments
(sauf s'il pointent sur l'élément supprimé, bien sûr).
J'avais un doute, merci
Autre solution : Si tu veux garder std::vector, stocke l'indice de
l'élément en question plutôt qu'un pointeur - il restera valide en cas
de rédimensionnement (à moins que tu insères ou supprimes quelque chose
avant, ce qui décale le reste).
Oui, c'est pour cela que finalement j'ai abandonné mon tableau
Utilise std::list à la place de std::vector - les pointeurs et itérateurs restent alors valides si on insère ou supprime des éléments (sauf s'il pointent sur l'élément supprimé, bien sûr).
J'avais un doute, merci
Autre solution : Si tu veux garder std::vector, stocke l'indice de l'élément en question plutôt qu'un pointeur - il restera valide en cas de rédimensionnement (à moins que tu insères ou supprimes quelque chose avant, ce qui décale le reste).
Oui, c'est pour cela que finalement j'ai abandonné mon tableau