1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| /* Soit un tableau de weak_ptr sur un type T proche de
std::vector<std::weak_ptr<T>> tabWeaks;
/* et "quelque part", nous parcourrons le tableau en n'incrémentant le compteur
* de référence que si c'est vraiment nécessaire et que pour un temps strictement
* indispensable:
*/
for(auto & weak : tabWeaks){
if(condition){
std::shared_ptr<T> locked{weak}; // incrémente le comptage de référence
/* je peux utiliser locked en étant sûr que la mémoire allouée
* au pointeur sous-jacent ne sera pas libérée "par erreur".
*/
} /* locked est détruit, vu qu'on sort de sa portée
* et, s'il s'agit de la dernière référence au pointeur
* sous-jacent -- parce que l'on est dans un contexte
* multi thread, ou que sais-je --, la mémoire allouée à
* celui-ci pourra être libérée
*/
} |