Bonsoir à tous,
vous allez trouvez la question certainement un peu redondante mais les explications fournies ainsi que les exemples me semblent trop complexes, enfin je veux dire qu'avec des exemples plus simples on comprendrait plus parfaitement.
Je vous donne donc un exemple vraiment trivial :
C'est trivial hein ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 typedef shared_ptr<Classe1> Classe1_ptr; Classe1_ptr fonction1() { return Classe1_ptr(new Classe1("test")); } main() { //Pour simplifier... ;) Classe1_ptr p = fonction1(); }
Ce je voudrais savoir c'est si au retour de fonction1() mon pointeur intelligent a un use_count() de 1 ou de 0 ?
Je suis un peu perturbé car en Objective-C on nous dit de faire systématiquement un [p retain] pour augmenter le compteur et un [p release] à la fin pour le décrémenter.
Ici je serais tenté de faire un Classe1_ptr(p) pour augmenter le compteur...
J'ai fait des tests : et le use_count au retour est bien de 1, mais va-t-il le rester ? Si je fais Classe1_ptr(p), le use_count passe à 2, ce qui est logique. Est-ce que je prends un risque vis-à-vis de la destruction, est-ce que c'est nécessaire ou inutile ?
Sinon petite question subsidiaire :
S'agissant d'un vector<Classe1_ptr>, si je le récupère en retour d'une fonction, quel est le use_count des éléments qu'il contient ? Ne prenais-je pas le risque de voir son contenu disparaitre si je n'agis pas sur le compteur des éléments ?
je vous remercie pour ces éclaircissements qui je suis sur seront de nature à aider les autres qui comme moi pataugent un peu avec cette syntaxe (je suis plus à l'aise en Objective-C je l'avoue...)
Salutations
Tristan
Partager