Quels garbage collectors sont disponibles pour C++? Utilisez-vous l'un d'entre eux? Avec quels résultats?Quels garbage collectors sont disponibles pour C++?
Répondre
La bibliothèque Boost inclut des éléments shared_ptr qui agissent essentiellement comme un garbage collector de comptage de référence. Si vous adoptez le principe RAII de la conception C++, cela et auto_ptr combleront vos besoins pour un "garbage collector".
Pas si vous voulez pouvoir modéliser des références cycliques. –
@DanielEarwicker: En fait, Boost contient aussi weak_ptr pour résoudre ce problème. –
@JosephGarvin Vrai - mais alors vous devez choisir le bon. Avec un GC, vous n'avez pas (ce qui est ce que le PO a demandé à propos de). –
Le seul dont j'ai entendu personnellement est le Boehm garbage collector Je suis sûr que d'autres existent, mais je n'ai pas traité avec eux (ou cherché eux non plus).
Plusieurs GC C++ sont répertoriés on wikipedia.
Cependant, je n'en utilise pas, RAII est aussi mon ami.
Le garbage collector Boehm est plutôt bon pour C, mais difficile à utiliser sous C++. Vérifiez la section "interface C++" au http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html. Mon avis est que si vous avez besoin de garbage collection, choisissez un langage qui l'a intégré.
La meilleure solution générale pour C++ est des pointeurs partagés (de boost par exemple) avec vous traitant des dépendances circulaires. Il y a deux choses que vous pouvez faire: 1. la conception de la chose sans dépendances circulaires 2. conception de la chose avec une « cheville ouvrière » qui brise le cercle pour permettre la remise en état des objets
Soit vous faites affaire avec réel Mauvais, compliqué, difficile à déboguer des problèmes avec un garbage collector pour C++ ou vous faites face au problème classique plus simple de libérer vos objets lorsque vous en avez fini avec eux.
Il y a toujours, ahem: C++/CLI - C++ pour le .NET Framework. Assez bonne collecte des ordures là. : p
Bien que, pour être honnête, avec tout le sucre syntaxique qu'ils mettent là, vous pourriez presque le considérer comme un tout nouveau langage qui fonctionne assez bien avec C/C++. Si vous n'êtes pas marié à C++ en tant que langage, vous pouvez également regarder dans D, qui compile en code natif comme C++ (et contrairement à C++/CLI) mais qui a également la garbage collection.
Vous pouvez trouver plusieurs implémentations here. Je n'ai jamais essayé aucun d'entre eux et en général, je trouve un GC non déterministe causant plus de mal que de bien.
- 1. Quels frameworks C++ HTTP sont disponibles?
- 2. Quels autres gestionnaires de session sont disponibles pour Emacs?
- 3. Quels moteurs de modèles sont disponibles pour ASP.NET MVC Framework?
- 4. Quels addons/AddIns sont disponibles pour VS 2005 IDE
- 5. Quels add-ons/utilitaires sont disponibles pour TFS?
- 6. Quels sont les remplacements disponibles pour vbscript dans une application?
- 7. Quels sont les clients GUI disponibles pour Mercurial?
- 8. Quels éditeurs modaux sont disponibles en dehors de vi/vim?
- 9. Quels types de sockets sont disponibles dans VxWorks?
- 10. Quels sont les autres clients http génériques disponibles?
- 11. Quels sont les bons outils disponibles pour créer de l'aide en ligne pour les applications .net?
- 12. Quels outils de génération automatique de code sont disponibles pour les classes Castle ActiveRecord?
- 13. Quels sont les spécificateurs d'accès disponibles dans C#? Quel est le défaut?
- 14. Garbage Collection en C++/CLI
- 15. Quels outils sont disponibles pour tester les performances des instructions SQL?
- 16. Quels produits de référentiel sont disponibles pour assurer le suivi des services Web?
- 17. Quels types d'options d'authentification sont disponibles pour les sites Web et les applications Web?
- 18. Quels cadres de traitement des paiements, comme ActiveMerchant, sont disponibles pour d'autres langues?
- 19. Quels outils gratuits sont disponibles pour analyser les conflits de verrous dans Java?
- 20. je veux savoir quels sont tous les déclencheurs disponibles pour treeview
- 21. Quels outils freeware/floss sont disponibles pour charger les données dans SPSS?
- 22. Quels sont les paramètres de réglage disponibles pour Oracle BPEL PM
- 23. Quels modules python sont disponibles pour aider à la démonisation dans la bibliothèque standard?
- 24. Quels frameworks OpenGL ES sont disponibles pour les interfaces utilisateur 2D avec iPhone OS?
- 25. Quels sont les outils disponibles pour créer en cours des serveurs COM en Java?
- 26. Quels sont les outils disponibles pour les traitements par lots temporisés dans Java EE?
- 27. Quels sont les outils disponibles pour compiler des projets .NET vers des binaires natifs autonomes?
- 28. Quels outils d'administration gratuits sont disponibles pour SQL Server Express 2005?
- 29. Quelles sont les options disponibles pour VisualSVNServerHooks.exe?
- 30. Quels sont les symbos #if prédéfinis C#?
Il n'y a pas besoin d'un garbage collector dans le cas général car les pointeurs intelligents C++ sont supérieurs et donnent une destruction déterministe. Si vous avez un "cas d'utilisation" particulier pour la collecte des ordures alors peut-être que nous pourrions répondre à la question de façon plus réfléchie. –
@Martin - votre commentaire ressemble à une réponse. Vous devriez l'afficher pour que les gens puissent voter correctement. – Aaron
Boehm a fait une présentation pour le comité ISO C++ sur GC (2004 IIRC, lorsque les pointeurs intelligents étaient bien connus) donc il semble que l'opinion de Martins ne devrait pas être énoncée comme un fait. – MSalters