Question

juste une question rapide, si vous avez dit:

using namespace std;

map< int, vector< string > > map1;

ou peut-être même:

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

Et juste pour que vous ayez la bonne idée:

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

Si je fais juste:

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

est-il en sécurité en ce qu'il va vider tout sur la carte et ses cartes imbriquées, vecteurs, listes, etc.?

note: Je sais que si vous utilisez des pointeurs dont vous avez besoin pour passer et supprimer manuellement ou si la carte est hors de portée, cela devrait aller aussi aussi que je ne suis plus particulièrement intéressé par ce cas et sur la pile.

Était-ce utile?

La solution

Oui, une carte détruira tous les composants.

Si ses composants sont des conteneurs stl, leurs destructeurs effaceront les conteneurs.

En savoir plus sur conteneurs STL notamment sur Destructeur de std::map

Autres conseils

Oui c'est parfaitement sûr.Les conteneurs STL s'occupent de la gestion de la mémoire.

Cependant, si vous stockez des pointeurs sur des objets que vous avez alloués vous-même, vous devez également les supprimer vous-même:

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top