¿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
Tiene sentido, pero me pregunto si lo siguiente lograría lo mismo. ¿Alguien puede decirme si hay alguna diferencia?
myVector = vector
davy.ai
El código
myVector = vector<int>();
crea un nuevo objeto vector y lo asigna amyVector
, 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 demyVector
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 demyVector = vector<int>();
cuando el objetivo es liberar memoria.