2010-07-03 4 views
11

Doublons possibles:
reduce the capacity of an stl vector
Is this normal behavior for a std::vector?Forcer un vecteur std :: pour libérer sa mémoire?

Je sais que std :: vecteurs ne le font pas 'libre' de la mémoire lorsque vous appelez vector.clear(), mais comment fais ça? Je veux qu'il libère toutes ses ressources une fois que je l'efface, mais je ne veux pas le détruire.

Voici ce qui se passe en ce moment. J'ai une classe appelée OGLSHAPE et je les pousse dans un vecteur d'entre eux. J'espérais qu'une fois que j'aurais fait shapevec.clear(), j'aurais récupéré toute ma mémoire, mais je n'en aurais récupéré que les 3/4. Je ne suis pas sûr à 100% si c'est une fuite de mémoire ou pas, donc je veux libérer toutes les ressources pour être sûr que ce n'est pas une fuite. Merci

Répondre

13

Utilisez l'astuce de swap:

#include <vector> 

template <typename T> 
void FreeAll(T & t) { 
    T tmp; 
    t.swap(tmp); 
} 

int main() { 
    std::vector <int> v; 
    v.push_back(1); 
    FreeAll(v); 
} 
+1

Neil, y a-t-il une raison pour que vous ayez 'tmp' ou est-ce juste une question de style et de préférences personnelles? – sbi

+0

@sbi Les deux :-) Et je pense que c'est plus clair. –

+3

@Neil: Oui, ma formulation était mauvaise, je voulais demander s'il y a une raison technique. Quoi qu'il en soit, merci d'avoir répondu. J'ai peut-être été empoisonné par le _C Tenesseness Virus_, mais je préfère en fait 'std :: vector () .swap (v)'. – sbi

1

Pensez à utiliser l'astuce de swap:

vecteur (formes) .swap (formes);

Questions connexes