Bonjour la communauté,
Ci dessous 2 codes (minimal) qui (je pense) fonctionnent pour gérer une collection d'objet via un Vector :
"A l'ancienne" donc avec des pointeurs nus :
En C++ "moderne" donc avec des pointeurs smart :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 { std::vector <Objet *> vPobjet; // Objet est une classe définie par ailleurs for(int i=0; i<5; i++) vPobjet.push_back(new Objet()); // 5 Pointeurs vers 5 nouveaux objets poussés dans le vector ... vPobjet[3] -> faitUnTruc(); // utilisation d'une méthode de la classe de l'objet 4 ... vPobjet[2] -> destruct(); // utilisation d'une méthode qui appelle le destructeur de la classe (destruction de l'objet 3) delete vPobjet[2]; // libération de la mémoire occupée par l'objet 3 maintenant détruit vPobjet.erase(vPobjet.begin + 2); // "effacement" du pointeur vers l'objet 3 maintenant détruit }
Normalement dans les 2 cas je n'ai pas de fuite mémoire... Est-ce correct ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 { std::vector <std::unique_ptr<Objet>> vPobjet; // Objet est une classe définie par ailleurs for(int i=0; i<5; i++) vPfenetre.push_back(std::make_unique<Objet> ()); // 5 Pointeurs uniques vers 5 nouveaux objets poussés dans le vector <= Ici "emplace_back" est peut être préférable ? ... vPobjet[3] -> faitUnTruc(); // utilisation d'une méthode de la classe de l'objet 4 ... vPobjet[2] -> destruct(); // utilisation d'une méthode qui appelle le destructeur de la classe (destruction de l'objet 3) // PAS DE DELETE Pke Pointeur smart (il se débrouille pour libérer la mémoire) :D vPobjet.erase(vPobjet.begin + 2); // "effacement" du pointeur vers l'objet 3 maintenant détruit }
Rick.
Partager