Est std::vector mémoire libérée sur une nette?
Supposons que j'ai un std::vector de structures. Qu'advient-il de la mémoire si le vecteur est clear()'d?
std::vector<myStruct> vecs;
vecs.resize(10000);
vecs.clear();
La mémoire sera libérée, ou encore attachés à l'vec variable comme une réutilisables tampon?
- Essayez d'appeler
capacity()
. - Merci à tous. Je veux la mémoire pour être libéré de la garantie. J'ai donc allouer le vecteur à l'aide de nouvelles std:vector<myStruct>, puis appeler delete quand je suis fait. Donc la mémoire de la garantie d'être libéré.
- le seul effet de l'allocation dynamique est d'introduire une ineffiency. voir jerry réponse à, d'une manière raisonnable à vide d'un vecteur. dans un corps de boucle un autre bon moyen est de faire juste le vecteur local pour le corps de la boucle, c'est à dire de le déclarer à l'intérieur du corps de la boucle.
- Juste pour l'intérêt, pourquoi ne le mémoire doivent être garantis libre?
- Parce que c'est ios opération et que je suis en train d'économiser de la mémoire sur la plate-forme.
Vous devez vous connecter pour publier un commentaire.
Le souvenir reste attaché à l'vecteur. Si vous souhaitez libérer de l'il, l'habitude est de permuter avec un vecteur vide. C++11 ajoute également un
shrink_to_fit
fonction membre qui vise à offrir à peu près la même capacité, plus directement, mais c'est non-contraignant (en d'autres termes, il est susceptible de libérer de la mémoire supplémentaire, mais pas encore vraiment nécessaire de le faire).Le vecteur de la mémoire n'est pas garanti d'être effacées. Vous ne pouvez pas accéder en toute sécurité les éléments après un clair. Assurez-vous que la mémoire est désallouée Scott Meyers conseillé pour ce faire:
Cplusplus.com a ceci à dire sur ce:
Le destructeur est appelé sur les objets, mais la mémoire reste affecté.
Non, la mémoire ne sont pas libérés.
En C++11, vous pouvez utiliser le
shrink_to_fit
méthode pour forcer le vecteur pour libérer de la mémoire.http://www.cplusplus.com/reference/vector/vector/
resize(0)
qui à ont le côté pour effet de libérer de la mémoireresize(0)
est la garantie de conserver la mémoire.