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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top