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 :
J'utilise ici un reference_wrapper mais j'ai le même problème avec un pointeur ou une référence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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 ?) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 5 -17891602
merci d'avance.
Partager