Maintenir une référence sur un objet d'un vector
bonjour,
je cherche à maintenir des références(ou pointeurs) sur des objets contenus dans un vector (en réalité je stocke ces références dans un autre vector à l'aide de reference_wrapper). J'ai remarqué que lorsque je modifie le vector (celui qui contient les objets), les refrence_wrapper ne "pointent" (je mets entre guillement parceque c'est pas vraiment des pointeurs) plus sur les objets en question. J'ai réussi à reproduire le phénomène à petite échelle :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <iostream>
#include <vector>
int main(){
//je crée un vector de int
std::vector<int> tab;
tab.push_back(5);//je push 5 à la fin
std::reference_wrapper<int> n = tab[0];//je crée une référence sur ce 5 que je viens de push
std::cout << n << std::endl;//je l'affiche
tab.push_back(3);//je push 3 dans le vector
std::cout << n << std::endl;//je réaffiche n, (je m'attend à ré-afficher 5)
std::cin.get();
return 0;
} |
J'utilise ici un reference_wrapper mais j'ai le même problème avec un pointeur ou une référence.
En sortie j'ai :
Du coup ma question est la suivante : Comment maintenir une référence (ou un pointeur ça m'importe peu) sur un objet dans un vector ? est-ce que je dois utiliser un autre container de la STL ? est-ce que je dois utiliser des pointeurs intelligent (shared_ptr par exemple ?) ?
merci d'avance.