Je viens de regarder le code de shared_ptr (ou weak_ptr), et il me semble que tu te trompes. Il y a un pointeur ET une class shared_count (ou weak_count) qui contient elle-même au moins un pointeur. Cela fait au moins deux pointeurs. Pas mieux donc...
Par contre ce que tu décris (un pointeur vers une structure avec un pointeur et un compteur) ressemble très fort au premier smart pointer dont je parle au tout début de cette discussion. Et, justement, Médinoc soulevait que cela ajoutait une indirection supplémentaire (point 5), bien qu'en admettant que son avantage soit d'être (le) plus léger (possible).
Parmi les deux smart pointers de cette discussion, le premier est le plus léger, le deuxième le plus performant (enfin, tant qu'on ne s'amuse pas à en faire des dizaines de copies, car le detach() peut être très lourd... Il suffirait alors d'avoir une liste bidirectionelle, mais cela nous ferait 3 pointeurs)
OK, je vois. La discussion est intéressante. Mais il y a des moments où, à force d'essayer de combler les "lacunes" du C++ afin de prévoir tous les cas possibles qui en ferait un langage aussi "facile" et "robuste" à utiliser qu'un Java ou autre C#, autant utiliser ces derniers... Un bon programmeur C++ n'est pas celui qui utilise le moins de delete possible, mais celui qui sait pourquoi il l'utilise. La robustesse est mieux garantie par l'expérience que par un outil ou un langage.
Mais bon, là on sort de la discussion simplement technique pour entrer dans une discussion idéologique.
Partager