Pergunta

Só uma pergunta rápida, se você tem a dizer:

using namespace std;

map< int, vector< string > > map1;

ou talvez ainda:

map< int, map< int, vector< string > > > map2;

e só para você ter a idéia certa:

map< int, map< int, map< int, vector< string > > > > map3;

se eu fizer apenas:

map1.clear();
map2.clear();
map3.clear();

É seguro que irá esvaziar-se de tudo o mapa e seus aninhadas mapas, vetores, listas, etc.?

Nota:Eu sei que se você usar ponteiros que você precisa para ir manualmente através de e eliminar ou, se o mapa sai de escopo, isso deve ser bom demais eu só estou particularmente interessado neste caso, quando em escopo e na pilha.

Foi útil?

Solução

Sim, o mapa irá destruir todos os componentes.

Se seus componentes são contentores STL, seus destruidores irá limpar os recipientes.

Leia mais sobre Contentores STL nomeadamente sobre o processo de destruição da std::map

Outras dicas

Sim, isto é perfeitamente seguro.Contentores STL cuidar de gerenciamento de memória.

No entanto, se você armazenar ponteiros para objetos que você alocou para si mesmo, você também tem que eliminá-los você mesmo:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top