Busqué StackOverflow pero no pude encontrar la respuesta a esta pregunta.¿Cuál es la forma correcta de liberar un std :: vector de punteros en C++?
Supongamos que tengo un std::vector<Day *> vector_day
- es decir - un vector de punteros a Day
objeto. Ahora push_back
a vector_day
muchos elementos:
vector_day.push_back(new Day(12));
vector_day.push_back(new Day(99));
vector_day.push_back(new Day(71));
...
ahora en algún momento ya no necesitan vector_day
. ¿Cuál es la forma correcta de liberar la memoria?
Es esta la forma correcta:
for (std::vector<Day *>::iterator i = vector_day.begin(); i != vector_day.end(); ++i) {
delete *i;
}
¿Esto no invalida el vector en cada eliminación? Estoy muy confundido.
puede ser una víctima de http://stackoverflow.com/questions/3054567/right-way-to-deallocate-an-stdvector-object –
RC - no realmente, esto es completamente diferente. – bodacydo
No coloque punteros así. ¿Qué sucede si se lanza una excepción entre el momento en que el material está en el vector y el lugar donde lo elimina todo? Te saltearías y perderías. Utilice un puntero inteligente o un contenedor de puntero, nunca punteros sin formato. – GManNickG