(je réponds ici car les 150 niveaux d'indentation deviennent illisibles)
GC et smart-pointers, il y a quand même des différences:
- Un GC, maintenant, sait gérer tout seul les cycles ; à contrario des pointeurs à comptage de référence, avec lesquels il faut s'aider de weak_ptr ou assimilé
- Un GC ne finalise (comprendre: "détruit") pas l'objet pointé à contrario de tous les smart-pointers du C++.
- Tous les smart pointers ne sont pas à comptage de référence. La veille définition, c'est qu'un pointeur non brut/nu est smart/intelligent. Ainsi std::auto_ptr est un smart-pointer, tout comme boost::scoped_ptr, ou std::unique_ptr. [J'ai un peu de mal à voir pourquoi ces pinaillages autour des compteurs du coup]
- Les *_ptr<> de boost (et de C++11) peuvent encapsuler autre chose que de la mémoire, et ça c'est classe: nous avons ainsi des scoped_guard. Un GC ? Même pas en rêve. Il ne connait que la mémoire.
- Après je me souviens de discussions sur fclc++ ou clc++m où un avantage était prêté aux GC : le MT car ils n'utilisaient pas de compteurs atomiques.
OK, ils ont une fonction commune : la restitution implicite de la mémoire quand plus rien n'y fait référence ; de suite pour les smart pointer (déterministe), un jour pour les GCs (non déterministe). Et c'est tout. Sorti de ça, ce n'est pas du tout pareil.
[^] # Re: templates variadiques
Posté par lmg HS (site web personnel) . En réponse à la dépêche Le standard C++0x a enfin été voté. Évalué à 1.
(je réponds ici car les 150 niveaux d'indentation deviennent illisibles)
GC et smart-pointers, il y a quand même des différences:
- Un GC, maintenant, sait gérer tout seul les cycles ; à contrario des pointeurs à comptage de référence, avec lesquels il faut s'aider de weak_ptr ou assimilé
- Un GC ne finalise (comprendre: "détruit") pas l'objet pointé à contrario de tous les smart-pointers du C++.
- Tous les smart pointers ne sont pas à comptage de référence. La veille définition, c'est qu'un pointeur non brut/nu est smart/intelligent. Ainsi std::auto_ptr est un smart-pointer, tout comme boost::scoped_ptr, ou std::unique_ptr. [J'ai un peu de mal à voir pourquoi ces pinaillages autour des compteurs du coup]
- Les *_ptr<> de boost (et de C++11) peuvent encapsuler autre chose que de la mémoire, et ça c'est classe: nous avons ainsi des scoped_guard. Un GC ? Même pas en rêve. Il ne connait que la mémoire.
- Après je me souviens de discussions sur fclc++ ou clc++m où un avantage était prêté aux GC : le MT car ils n'utilisaient pas de compteurs atomiques.
OK, ils ont une fonction commune : la restitution implicite de la mémoire quand plus rien n'y fait référence ; de suite pour les smart pointer (déterministe), un jour pour les GCs (non déterministe). Et c'est tout. Sorti de ça, ce n'est pas du tout pareil.