vetor dentro de um mapa é claro seguro?
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.
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.