Mais, ce n'est pas grave, tu as raison et j'ai tord (et je m'en contretape).
sauf que mon objectif n'est pas d'avoir raison mais que l'on ce comprenne.
Je donne au verbe "alloué" le sens de "réservation de mémoire". De la mémoire qui peut être sur le tas, dans la pile, ou même dans un registre. Quand tu déclare une variable ou un objet, tu as une allocation, de même si tu fais un appel à malloc ou a new.
Mais dans tous les cas, l'allocation n'est pas ici l'élément pertinent. Ce qui est pertinent c'est que tu as au départ un pointeur, et que tu enveloppe ce pointeur dans une classe *_ptr pour ne pas avoir à te soucier de le libérer manuellement.
Dans ce cas, ta classe *_ptr réalise exactement la même chose qu'un GC, détecter quand le pointeur n'est plus utilisé et le signaler au gestionnaire de mémoire.
Quand tu crées un *_ptr, tu ne fais que signaler que l'objet doit être manager.
Dans un langage à GC, quand un objet est créé, il est de même signalé au GC.
-> La seule différence est que dans le cas d'un langage à GC c'est fais implicitement car tous les objets sont managés.
Quand il n'y a plus de références, le destructeur du *_ptr va appeler un éventuel finaliseur puis signaler au gestionnaire mémoire que le pointeur peut-être libéré.
Dans un langage à GC, quand il n'y a plus de références, le GC va appeler un éventuel finaliseur puis signaler au gestionnaire de mémoire que le pointeur peut-être libéré.
-> Aucune différences à part le fait que certains GC ne supportent pas les finaliseurs.
Donc, je ne comprend pas ou tu vois une différence entre les *_ptr et un GC. Les *_ptr sont des GC qui ne managent qu'une partie des objets et qui imposent la présence de finaliseurs. Leur définition fais que tous les algorithmes de GC ne peuvent être utilisés simplement, mais ça reste un GC.
[^] # Re: templates variadiques
Posté par beagf . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 4.
sauf que mon objectif n'est pas d'avoir raison mais que l'on ce comprenne.
Je donne au verbe "alloué" le sens de "réservation de mémoire". De la mémoire qui peut être sur le tas, dans la pile, ou même dans un registre. Quand tu déclare une variable ou un objet, tu as une allocation, de même si tu fais un appel à malloc ou a new.
Mais dans tous les cas, l'allocation n'est pas ici l'élément pertinent. Ce qui est pertinent c'est que tu as au départ un pointeur, et que tu enveloppe ce pointeur dans une classe *_ptr pour ne pas avoir à te soucier de le libérer manuellement.
Dans ce cas, ta classe *_ptr réalise exactement la même chose qu'un GC, détecter quand le pointeur n'est plus utilisé et le signaler au gestionnaire de mémoire.
Quand tu crées un *_ptr, tu ne fais que signaler que l'objet doit être manager.
Dans un langage à GC, quand un objet est créé, il est de même signalé au GC.
-> La seule différence est que dans le cas d'un langage à GC c'est fais implicitement car tous les objets sont managés.
Quand il n'y a plus de références, le destructeur du *_ptr va appeler un éventuel finaliseur puis signaler au gestionnaire mémoire que le pointeur peut-être libéré.
Dans un langage à GC, quand il n'y a plus de références, le GC va appeler un éventuel finaliseur puis signaler au gestionnaire de mémoire que le pointeur peut-être libéré.
-> Aucune différences à part le fait que certains GC ne supportent pas les finaliseurs.
Donc, je ne comprend pas ou tu vois une différence entre les *_ptr et un GC. Les *_ptr sont des GC qui ne managent qu'une partie des objets et qui imposent la présence de finaliseurs. Leur définition fais que tous les algorithmes de GC ne peuvent être utilisés simplement, mais ça reste un GC.