Question

Est-ce qu'il existe une collection, qui est au courant des internes de shared_ptr et évite la copie régulière des éléments shared_ptr stockés en faveur de se contenter de copier leur pointeur interne faible?

Cela signifie implicitement, qu'aucun appel constructeur / destructor sera fait et qu'il n'y aura pas de manipulation des compteurs de référence de shared_ptrs.

Était-ce utile?

La solution

  

qui est au courant des composants internes du shared_ptr,

Cela devrait répondre à votre question là. Pour être au courant des internes, une telle collection aurait presque certainement de faire partie des bibliothèques de pointeurs intelligents de boost. Malheureusement, il n'y a pas une telle chose.

est en effet un inconvénient à des pointeurs intelligents. Je recommande d'utiliser des structures de données qui limitent le nombre de copies effectuées en interne. Les réaffectations de vecteur sera douloureux. Peut-être un deque, qui a une allocation basée sur chunked, serait utile. Gardez à l'esprit aussi que les implémentations de vecteur ont tendance à obtenir une nouvelle mémoire en morceaux de plus en plus de façon exponentielle. Donc, ils ne réaffecte pas, par exemple, tous les 10 éléments. Au lieu de cela, vous pourriez commencer avec 128 éléments, alors les réserves de vecteur lui-même 256, puis se déplace jusqu'à 512, 1024, etc. Chaque fois que doubler ce qui est nécessaire.

Court de cela, il est le ptr_vector de boost ou préallocation vos structures de données avec suffisamment d'espace pour empêcher la copie interne.

Autres conseils

En théorie, après C ++ 0x est adopté, les conteneurs seront modifiés pour utiliser la sémantique de déplacer le cas échéant. À ce moment-là, shared_ptr peut également être modifié pour avoir un constructeur de déplacement pour minimiser l'ajustement du nombre de références inutiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top