Domanda

Solo una domanda veloce, se hai detto:

using namespace std;

map< int, vector< string > > map1;
.

o forse anche:

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

E così hai la giusta idea:

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

Se faccio solo:

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

È al sicuro in quanto svuoterà tutto sulla mappa e le sue mappe annidate, vettori, elenchi, ecc.?

Nota: So che se usi i puntatori di cui hai bisogno per passare manualmente ed eliminare o se la mappa passa da portata, dovrebbe andare bene anche io sono solo particolarmente interessato a questo caso quando è in ambito e sullo stack.

È stato utile?

Soluzione

Sì, una mappa distruggerà tutti i componenti.

Se i suoi componenti sono contenitori STL, i loro distruttori cancellano i contenitori.

Leggi di più su contenitori STL in particolare su Destructor of std::map

Altri suggerimenti

Sì, questo è perfettamente sicuro.I contenitori STL si prendono cura della gestione della memoria.

Tuttavia, se conservi puntatori agli oggetti che hai assegnato, devi anche eliminarli da soli:

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.
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top