che è a conoscenza di interni shared_ptr,
che dovrebbe rispondere alla tua domanda proprio lì. Per essere a conoscenza degli interni, una raccolta di questo tipo dovrebbe quasi sicuramente far parte delle librerie di puntatori intelligenti di boost. Sfortunatamente, non esiste una cosa del genere.
Questo è davvero uno svantaggio di puntatori intelligenti. Consiglierei l'uso di strutture dati che limitano il numero di copie eseguite internamente. Le riallocazioni di Vector saranno dolorose. Forse un deque, che ha un'assegnazione basata su chunked, sarebbe utile. Tenete presente anche che le implementazioni dei vettori tendono ad acquisire nuova memoria in blocchi esponenzialmente crescenti. Quindi non riassegnano, diciamo, ogni 10 elementi. Invece si potrebbe iniziare con 128 elementi, quindi il vettore si riserva 256, quindi si sposta fino a 512, 1024, ecc. Ogni volta raddoppiando ciò che è necessario.
In breve, c'è boost ptr_vector o preallocazione delle strutture dati con spazio sufficiente per impedire la copia interna.
fonte
2009-06-05 16:18:08
Nella bozza C++ 0x, shared_ptr ha già questo comportamento. –
Bene allora eccoti! :) – MSN