Vector dentro de un mapa es claro seguro?
Pregunta
Solo una pregunta rápida, si usted ha dicho:
using namespace std;
map< int, vector< string > > map1;
o tal vez incluso:
map< int, map< int, vector< string > > > map2;
y para que obtenga la idea correcta:
map< int, map< int, map< int, vector< string > > > > map3;
si hago solo:
map1.clear();
map2.clear();
map3.clear();
es seguro, ya que vaciará todo en el mapa y sus mapas, vectores, listas, etc.?
NOTA: Sé que si usa los punteros, necesita pasar y eliminar manualmente o si el mapa sale del alcance, debería estar bien, solo estoy particularmente interesado en este caso cuando está en alcance y en la pila.
Solución
Sí, un mapa destruirá todos los componentes.
Si sus componentes son contenedores STL, sus destructores eliminarán los contenedores.
Leer más sobre contenedores de STL especialmente sobre destructor de std::map
Otros consejos
Sí, esto es perfectamente seguro.Los contenedores STL se encargan de la gestión de la memoria.
Sin embargo, si almacena los punteros a objetos a los que te asignó, también tiene que eliminarlos usted mismo:
std::vector<MyClass*> vec;
vec.push_back(new MyClass());
vec.clear(); // you get a memory leak here because you did not delete the object you allocated.