Pregunta

¿Existe una colección, que conozca a los internales Shared_PTR y evita la copia regular de los elementos almacenados Shared_PTR a favor de simplemente copiar su puntero débil interno?

Esto significa implícitamente que no se realizarán llamadas de constructor/destructora y que no habrá manipulación de los contadores de referencia de Shared_PTRS.

¿Fue útil?

Solución

que es consciente de Shared_PTR -THERALS,

Eso debería responder a su pregunta allí mismo. Para ser conscientes de las partes internas, tal colección seguramente tendría que ser parte de las bibliotecas Smart Pointer de Boost. Desafortunadamente, no existe tal cosa.

De hecho, este es un inconveniente de los consejos inteligentes. Recomendaría usar estructuras de datos que limiten el número de copias realizadas internamente. Las reasignaciones de Vector serán dolorosas. Quizás un deque, que tiene una asignación basada en el ausento, sería útil. Tenga en cuenta también que las implementaciones vectoriales tienden a obtener una nueva memoria en los fragmentos aumentados exponencialmente. Entonces no se reasignan, digamos, cada 10 elementos. En su lugar, puede comenzar con 128 elementos, luego el vector se reserva 256, luego se mueve hasta 512, 1024, etc. Cada vez que duplica lo que se necesita.

A falta de esto, está PTR_VECTOR de Boost o preellocando sus estructuras de datos con suficiente espacio para evitar la copia interna.

Otros consejos

En teoría, después de que se adopte C ++ 0x, los contenedores se modificarán para usar la semántica de movimiento cuando corresponda. En ese punto, shared_ptr También se puede modificar para tener un constructor de movimiento para minimizar el ajuste innecesario del recuento de referencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top