std::unique_ptr
tiene soporte para arrays, por ejemplo:
std::unique_ptr<int[]> p(new int[10]);
probablemente sea más conveniente usar std::vector
o std::array
.
¿Encuentras alguna utilidad a esta construcción?
Algunas personas no pueden permitirse el lujo de usar std::vector
, incluso con asignadores. Algunas personas necesitan un array de tamaño dinámico, por lo que std::array
está descartado. Y algunas personas obtienen sus arrays de otro código que se sabe que devuelve un array; y ese código no va a ser reescrito para devolver un vector
o algo así.
Permitiendo unique_ptr<T[]>
, cubres esas necesidades.
En resumen, usas unique_ptr<T[]>
cuando lo necesitas. Cuando las alternativas simplemente no van a funcionar para usted. Es una herramienta de último recurso.
Un std::vector
puede copiarse, mientras que unique_ptr<int[]>
permite expresar la propiedad única del array. En cambio, std::array
requiere que el tamaño se determine en tiempo de compilación, lo que puede resultar imposible en algunas situaciones.
He utilizado unique_ptr<char[]>
para implementar un pool de memoria preasignada utilizado en un motor de juegos. La idea es proporcionar grupos de memoria preasignada utilizados en lugar de asignaciones dinámicas para devolver los resultados de las solicitudes de colisión y otras cosas como la física de partículas sin tener que asignar / liberar memoria en cada fotograma. Es bastante conveniente para este tipo de escenarios en los que se necesitan pools de memoria para asignar objetos con un tiempo de vida limitado (típicamente uno, 2 o 3 frames) que no requieren lógica de destrucción (sólo liberación de memoria).