punteros programacion hacer dinamicos dinamico como arreglos arreglo array apuntadores c++ memory vector

programacion - punteros c++



¿Se ha liberado la memoria estándar:: vector en un claro? (4)

Supongamos que tengo un estándar :: de estructuras. ¿Qué le sucede a la memoria si el vector es claro () ''d?

std::vector<myStruct> vecs; vecs.resize(10000); vecs.clear();

¿Se liberará la memoria, o aún se adjuntará a la variable vecs como un buffer reutilizable?


La memoria del vector no está garantizada para ser borrada. No puede acceder de forma segura a los elementos después de un claro. Para asegurarse de que la memoria está desasignada, Scott Meyers aconseja hacer esto:

vector<myStruct>().swap( vecs );

Cplusplus.com tiene lo siguiente para decir al respecto:

Elimina todos los elementos del vector, llamando a sus respectivos destructores, dejando el contenedor con un tamaño de 0.

La capacidad del vector no cambia, y no ocurren reasignaciones debido a llamar a esta función. Una alternativa típica que fuerza una reasignación es usar swap: ...


La memoria permanece unida al vector. Si desea liberarlo, lo habitual es cambiarlo por un vector vacío. C ++ 11 también agrega una función de miembro shrink_to_fit que tiene la intención de proporcionar más o menos la misma capacidad más directamente, pero no es vinculante (en otras palabras, es probable que libere memoria adicional, pero todavía no es realmente necesario para hacerlo).



Se llama al destructor sobre los objetos, pero la memoria permanece asignada.