copiar - copy list c++
Diferencia entre std:: uninitialized_copy y std:: copy? (1)
¿Cuál es la diferencia entre std::uninitialized_copy
y std::copy
y cuándo debería usar cuál?
Supongamos que ha asignado algo de memoria en el montón a través de malloc
y tiene un puntero T* p
. Usted termina con un almacenamiento no inicializado porque todo lo que malloc
hace es marcar una ubicación del tamaño que pidió como asignado (lo new
por otro lado, realmente construye objetos y, por lo tanto, hace que el almacenamiento inicializado de la región asignada). Dado que la ubicación de memoria que comienza desde p
no tiene un objeto válido de tipo T
sentado allí, no puede hacer esto
T a;
*p = a;
ya que no hay objeto de tipo T
en p
para invocar el operador de asignación. En su lugar, tendrá una construcción de un objeto de tipo T
en la ubicación p
utilizando ubicación new
:
T a;
new (p) T{a};
std::uninitialized_copy
simplemente implementa la versión de rango del fragmento de código anterior cuando se trata de un rango que desea copiar al almacenamiento no inicializado.