Existe-t-il une collection, consciente des internes shared_ptr, et évitant la copie régulière des éléments shared_ptr stockés en faveur de la simple copie de leur pointeur interne? Cela signifie implicitement qu'aucun appel de constructeur/destructeur ne sera effectué et qu'il n'y aura aucune manipulation des compteurs de référence de shared_ptrs.Collection spécialisée pour shared_ptr
Répondre
qui est au courant des internes de shared_ptr,
Cela devrait répondre à votre question là. Pour être au courant des internes, une telle collection devrait presque certainement faire partie des bibliothèques de pointeurs intelligentes de boost. Malheureusement, il n'y a pas une telle chose.
C'est en effet un inconvénient pour les pointeurs intelligents. Je recommanderais d'utiliser des structures de données qui limitent le nombre de copies effectuées en interne. Les réallocations de Vector seront douloureuses. Peut-être qu'une deque, qui a une allocation basée sur des morceaux, serait utile. Gardez également à l'esprit que les implémentations vectorielles ont tendance à acquérir une nouvelle mémoire en augmentant de façon exponentielle les morceaux. Donc, ils ne réaffectent pas, disons, tous les 10 éléments. Au lieu de cela, vous pouvez commencer avec 128 éléments, puis le vecteur se réserve 256, puis se déplace jusqu'à 512, 1024, etc. Chaque fois que vous doublez ce qui est nécessaire. En dehors de cela, ptr_vector de boost ou pré-allouer vos structures de données avec suffisamment d'espace pour empêcher la copie interne.
En théorie, après l'adoption de C++ 0x, les conteneurs seront modifiés pour utiliser la sémantique de déplacement, le cas échéant. À ce stade, shared_ptr
peut également être modifié pour avoir un constructeur de déplacement afin de minimiser l'ajustement du compte de référence inutile.
- 1. shared_ptr dans std :: tr1
- 2. QList and shared_ptr
- 3. static_cast avec boost :: shared_ptr?
- 4. Comment faire pour supprimer intentionnellement un boost :: shared_ptr?
- 5. A quoi sert shared_ptr de boost (shared_ptr <Y> const & r, T * p)?
- 6. Pourquoi shared_ptr a un constructeur explicite
- 7. construire deux objets shared_ptr du même pointeur
- 8. obtenir un ptr normal de shared_ptr?
- 9. Ruby/Rails Collection Collection
- 10. auto_ptr ou shared_ptr équivalent dans les classes C++/CLI gérées
- 11. Utilisation de boost :: shared_ptr dans l'interface publique d'une bibliothèque
- 12. Comment devriez-vous retourner * ceci avec un shared_ptr?
- 13. Comment faire un pointeur vers une fonction template spécialisée sur une chaîne?
- 14. Setters pour les propriétés de type collection
- 15. Comment utiliser LINQ pour récupérer collection enfant
- 16. Bonne collection de bibliothèques pour C?
- 17. Propriété de collection pour WPF UserControl
- 18. Meilleures pratiques pour la collection XML
- 19. Existe-t-il une méthode linq-y pour les propriétés de collection d'union d'une collection d'objets?
- 20. Linq pour mettre à jour une collection avec des valeurs d'une autre collection?
- 21. Garbage Collection
- 22. Propriété de collection observable modifiée sur l'élément de la collection
- 23. Transposer une collection
- 24. array collection filter flex
- 25. Comment convertir un .net type de collection en collection VBA?
- 26. Comment traiter l'objet d'une collection appartenant à une autre collection?
- 27. VB.NET Collection fortement typée
- 28. JSP - Sauvegarde d'une collection
- 29. NHibernate et collection compte
- 30. Quelle collection générique utiliser?
Dans le projet C++ 0x, shared_ptr a déjà ce comportement. –
Eh bien alors voilà! :) – MSN