Pour conclure, je veux bien un cas d'usage quotidien de shared_ptr. Si je peux être détrompé, tant mieux.
Disclaimer : je n'y connais rien en C++ donc ce que je vais dire repose essentiellement sur ma compréhension de la documentation de shared_ptr.
On peut y lire :
std::shared_ptr est un pointeur intelligent qui permet le partage d'un objet via un pointeur. Plusieurs instances de shared_ptr peuvent posséder le même objet, et cet objet est détruit dans l'un des cas suivant :
le dernier shared_ptr possédant l'objet est détruit ;
le dernier shared_ptr possédant l'objet est assigné à un autre pointeur via operator=() ou reset().
Quand je lis cela, je pense immédiatement, par exemple, à la représentation mémoire des listes en OCaml1. Les listes dans ce langage sont des listes chaînées qui partagent leur queue. Je m'explique.
letl=[1;2;3];;(* la représentation mémoire de celle-ci est une chaîne :| 1 | -|-->| 2 | -|-->| 3 | -|-->| |*)
Chaque élément de la liste contient la valeur et un pointeur vers la queue ou la suite de la liste qui se termine par un « pointeur nul »2. Maintenant si je crée deux listes à partir de celle-ci en rajoutant un élément en tête, elles partageront en mémoire la suite l :
letl1=4::landl2=5::l;;(* ce qui en mémoire donne :| 4 | \| \ -->| 1 | -|-->| 2 | -|-->| 3 | -|-->| | /| 5 | /|*)
Ai-je bien compris le concept de shared_ptr et est-ce une utilisation possible ? Pour ce qui est de la libération mémoire par le GC des listes en OCaml, la règle est équivalente à la première de la doc sus-citée : « le dernier shared_ptr possédant l'objet est détruit ».
c'est en fait le cas de toutes les structures récursives à base de types somme, comme les arbres. ↩
c'est pas tout à fait ça mais c'est pour simplifier, c'est plutôt une valeur constante qui correspond à la liste vide et qui est la même pour toutes les listes quelque soit le type des éléments. ↩
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Donc pour résumer...
Posté par kantien . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 1. Dernière modification le 06 octobre 2016 à 11:18.
Disclaimer : je n'y connais rien en C++ donc ce que je vais dire repose essentiellement sur ma compréhension de la documentation de shared_ptr.
On peut y lire :
Quand je lis cela, je pense immédiatement, par exemple, à la représentation mémoire des listes en OCaml1 . Les listes dans ce langage sont des listes chaînées qui partagent leur queue. Je m'explique.
Chaque élément de la liste contient la valeur et un pointeur vers la queue ou la suite de la liste qui se termine par un « pointeur nul »2 . Maintenant si je crée deux listes à partir de celle-ci en rajoutant un élément en tête, elles partageront en mémoire la suite
l:Ai-je bien compris le concept de
shared_ptret est-ce une utilisation possible ? Pour ce qui est de la libération mémoire par le GC des listes en OCaml, la règle est équivalente à la première de la doc sus-citée : « le dernier shared_ptr possédant l'objet est détruit ».c'est en fait le cas de toutes les structures récursives à base de types somme, comme les arbres. ↩
c'est pas tout à fait ça mais c'est pour simplifier, c'est plutôt une valeur constante qui correspond à la liste vide et qui est la même pour toutes les listes quelque soit le type des éléments. ↩
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.