es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es asignar un std::vector vacío lo mismo que intercambiar por un std::vector vacío?

La siguiente página de Stack Overflow (https://stackoverflow.com/questions/10464992/c-delete-vector-objects-free-memory) indica que para liberar la memoria asignada en el montón después de borrar un std::vector, se puede hacer lo siguiente:

vector().swap(myVector);

Tiene sentido, pero me pregunto si lo siguiente lograría lo mismo. ¿Alguien puede decirme si hay alguna diferencia?

myVector = vector();

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El código myVector = vector<int>(); crea un nuevo objeto vector y lo asigna a myVector, lo que resulta en la destrucción del antiguo objeto vector y la liberación de su memoria. Sin embargo, esto no garantiza que la memoria del antiguo objeto vector sea liberada inmediatamente en el montón.

    Por otro lado, vector<int>().swap(myVector) intercambia el contenido de myVector con un nuevo vector temporal construido, cuyo tamaño de memoria se sabe que es pequeño. Esto puede llevar a una liberación inmediata de la memoria del antiguo vector en el montón.

    Por lo tanto, se recomienda generalmente usar vector<int>().swap(myVector) en lugar de myVector = vector<int>(); cuando el objetivo es liberar memoria.

Comments are closed.