Un smart pointer est un objet qui encapsule un pointeur, il y a donc bien une allocation de l'objet qui encapsule. Tu peux mettre ce que tu veux comme pointeur dedans, qu'il soit valide ou invalide ne change rien au fais qu'il y a bien allocation d'une coquille pour stocker le pointeur et son compteur de références.
Et pour revenir à ta remarque de départ c'est exactement ce que fais un GC : une nouvelle ressource est allouée et signalée au GC, lequel va placer la ressource dans une enveloppe avec les infos dont il a besoin pour pouvoir libérer la ressource quand ce sera nécessaire.
La seule différence est que souvent le GC va gérer tous les objets qui peuvent être alloués donc plutôt que d'avoir une enveloppe explicite, elle est implicite, c'est-à-dire que les objets intègrent eux-même les informations du GC afin d'éviter l'indirection et la surcharge en mémoire.
Et dans le cas des smart-pointers c'est la même chose car avec une bonne libc++ et un bon compilateur l'enveloppe en question est réduite à un compteur de référence avec un binding implicite au pointeur.
Donc, pour reprendre ton commentaire initial :
>Un GC gère l'allocation et la désallocation coordonnée d'objets.
>Un RIAA ne gère que la libération d'une ressource.
Soit tu ne considère pas que l'allocation de la coquille fais partie de l'allocation de l'objet, et donc ta première phrase est fausse ; soit tu considère qu'elle en fais partie, et dans ce cas c'est la deuxième qui est fausse.
Un GC et un smart pointer font la même chose : enregistrer l'existence d'une ressource et la libérer quand elle n'est plus nécessaire.
[^] # Re: templates variadiques
Posté par beagf . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 2.
Tu fais exprès de ne pas comprendre ?
Un smart pointer est un objet qui encapsule un pointeur, il y a donc bien une allocation de l'objet qui encapsule. Tu peux mettre ce que tu veux comme pointeur dedans, qu'il soit valide ou invalide ne change rien au fais qu'il y a bien allocation d'une coquille pour stocker le pointeur et son compteur de références.
Et pour revenir à ta remarque de départ c'est exactement ce que fais un GC : une nouvelle ressource est allouée et signalée au GC, lequel va placer la ressource dans une enveloppe avec les infos dont il a besoin pour pouvoir libérer la ressource quand ce sera nécessaire.
La seule différence est que souvent le GC va gérer tous les objets qui peuvent être alloués donc plutôt que d'avoir une enveloppe explicite, elle est implicite, c'est-à-dire que les objets intègrent eux-même les informations du GC afin d'éviter l'indirection et la surcharge en mémoire.
Et dans le cas des smart-pointers c'est la même chose car avec une bonne libc++ et un bon compilateur l'enveloppe en question est réduite à un compteur de référence avec un binding implicite au pointeur.
Donc, pour reprendre ton commentaire initial :
>Un GC gère l'allocation et la désallocation coordonnée d'objets.
>Un RIAA ne gère que la libération d'une ressource.
Soit tu ne considère pas que l'allocation de la coquille fais partie de l'allocation de l'objet, et donc ta première phrase est fausse ; soit tu considère qu'elle en fais partie, et dans ce cas c'est la deuxième qui est fausse.
Un GC et un smart pointer font la même chose : enregistrer l'existence d'une ressource et la libérer quand elle n'est plus nécessaire.