Domanda

La esiste una collezione, che è a conoscenza dei meccanismi interni shared_ptr, ed evita la copia regolare di elementi shared_ptr memorizzati in favore di semplicemente copiando il loro puntatore deboli interno?

Questo significa implicitamente, che nessuna chiamata costruttore / distruttore sarà fatto e che non vi sarà alcuna manipolazione dei contatori di riferimento shared_ptrs'.

È stato utile?

Soluzione

  

che è a conoscenza dei meccanismi interni shared_ptr,

Questo dovrebbe rispondere alla tua domanda proprio lì. Essere a conoscenza dei meccanismi interni, una raccolta avrebbe quasi certamente di essere parte di biblioteche di puntatore intelligente di boost. Purtroppo, non v'è nulla di simile.

Questo è davvero un aspetto negativo di puntatori intelligenti. Ti consiglio di utilizzare le strutture di dati che limitano il numero di copie fatte internamente. riassegnazioni del vettore saranno dolorose. Forse un deque, che ha una ripartizione basata Chunked, sarebbe utile. Tenete a mente anche che le implementazioni vettore tendono a diventare nuova memoria in modo esponenziale aumento pezzi. In modo da non riassegnare, per esempio, ogni 10 elementi. Invece si potrebbe iniziare con 128 elementi, quindi il vettore si riserva 256, poi si sposta fino a 512, 1024, ecc Ogni volta raddoppiando ciò che è necessario.

In mancanza di questo non c'è ptr_vector di amplificazione o preallocare vostre strutture di dati con lo spazio sufficiente per impedire la copia interna.

Altri suggerimenti

In teoria, dopo C ++ 0x viene adottato, contenitori sarà modificato per utilizzare semantica spostare all'occorrenza. A quel punto, shared_ptr può anche essere modificato per avere un costruttore mossa per minimizzare regolazione conteggio di riferimento superfluo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top