2012-05-10 11 views

Respuesta

5

Se libera en el sentido de que se llaman los destructores de todos los objetos contenidos, y el vector ya no posee la memoria.

Pero en realidad, acaba de regresar al allocator, que puede o no devolverlo al sistema operativo.

Siempre que no haya un error en el asignador que se utiliza, no ha creado una pérdida de memoria, si eso es lo que le preocupa.


1. Como señala @ David en el comentario a continuación, la memoria no necesariamente se cancela la asignación, dependiendo de si el tamaño tiene que cambiar o no.

+1

La asignación no necesita reasignar, copiar y desasignar el búfer antiguo si el vector de destino tiene suficiente capacidad. No necesita destruir los objetos viejos tampoco, pero puede usar el * operador de asignación * para * reescribir * los primeros elementos 'min (v1.size(), v2.size())' (suponiendo que no es necesario) reasignar –

2

En general, no necesariamente. Cuando asigna un vector al otro, la condición de publicación es que ambas matrices contendrán objetos equivalentes al final de la operación.

Si el capacity del vector destino es suficiente, la operación se puede lograr mediante una llamada al operador asignación en el set de min(v1.size(), v2.size()) elementos, y luego o bien destruyendo el resto de los elementos si el vector de destino llevó a cabo más elementos, o bien copia-construcción los elementos adicionales al final. En este caso, no se realizará ninguna publicación o asignación de memoria.

Si el vector de destino no tiene suficiente capacidad, creará un nuevo búfer con suficiente capacidad y copy-construc elementos en el nuevo búfer del vector de origen. Luego intercambiará los búferes antiguos y nuevos, destruirá todos los objetos antiguos y liberará el búfer antiguo. En este caso, los objetos antiguos son destruidos y se libera la memoria anterior, pero este es solo un caso.

Cuestiones relacionadas