URL: https://linuxfr.org/forums/programmation-c/posts/petit-soucis-avec-les-shared_ptr Title: Petit soucis avec les shared_ptr Authors: Anthony Jaguenaud Date: 2016年06月03日T13:26:12+02:00 License: CC By-SA Tags: ptr Score: 0 Bonjour, Je cherche à faire un petit code en remplaçant les pointeurs par des shared_ptr. J’ai probablement un défaut de design induit par mon expérience des pointeurs historiques... Voici un bout de code qui met en avant mon soucis : ```c++ #include #include #include using namespace std; class MyInt { public: static void init(int n); static MyInt &get(int n); int get_id() {return id;} protected: MyInt(int n):id(n){} private: int id; static vector MyInts; }; vector MyInt::MyInts; void MyInt::init(int n) { MyInts.reserve(n); for (int i=0;i> N; N = max(4,N); /* Pour l'exemple */ MyInt::init(N); // Pernons un share pointer sur l'element 3. auto p1 = make_shared(MyInt::get(3)); auto p2 = make_shared(MyInt::get(3)); cout << "p1 : id = " << p1->get_id() << ", n_ptr = " << p1.use_count() << ", addr = " << p1.get() << endl; cout << "p2 : id = " << p2->get_id() << ", n_ptr = " << p2.use_count() << ", addr = " << p2.get() << endl; } ``` Voici ce que donne l’exécution.> Nb de MyInt : 5 p1 : id = 3, n_ptr = 1, addr = **0x87a04c** p2 : id = 3, n_ptr = 1, addr = **0x87a07c** Le résultat est que mes deux pointeurs n’ont pas la même valeur, là où je voudrais qu’ils partagent le compteur de référence. Je n’avais pas très envie de mettre un `vector>` en type. C’est peut-être obligatoire... Sinon, j’imaginais une sorte de `get_shared` qui irait chercher si un shared_ptr pointe déjà sur l’objet ou s’il faut un créer un nouveau. À votre avis ?

AltStyle によって変換されたページ (->オリジナル) /