Envoyé par
Luc Hermitte
Les pointeurs sont intelligents n'ont de lourd que les noms de types à rallonge -- du moins en C++ tant que l'on ne passe pas par des typedef.
En revanche, ils ont une chose que ne possèdent pas les GCs : le déterminisme. Sur la mémoire, c'est sûr qu'une approche non déterministe peut s'avérer plus efficace, et sans mise en danger du système. Cependant, sur les autres ressources la différence est critique.
En cela, la solution de C# est intéressante : ce langage différencie la mémoire qui est collectée quand bon lui semble et les ressources pour lesquelles on peut disposer d'une finalisation déterminisme et pseudo-implicite (avec using) -- en Java, on passe à l'explicite lourd (try-finalize); OCaml, je ne connais pas.
Quant aux cycles ... ma foi, pour l'instant ils ne me gênent pas. Et combien même en réfléchissant un minimum, on voit vite où mettre du shared_ptr<>, et où mettre du weak_ptr<>
Partager