Pregunta ¿Forzar un std :: vector para liberar su memoria? [duplicar]


Posibles duplicados:
reducir la capacidad de un vector stl
¿Es este comportamiento normal para un std :: vector? 

Sé que std :: vectores no 'liberan' la memoria cuando llamas a vector.clear (), pero ¿cómo puedo hacer esto? Quiero que libere todos sus recursos una vez que lo borro, pero no quiero destruirlo.

Esto es lo que está sucediendo ahora. Tengo una clase llamada OGLSHAPE y los empujo en un vector de ellos. Esperaba que una vez que hiciera shapevec.clear () recuperaría toda mi memoria, pero solo obtuve 3/4 de ella. No estoy 100% seguro de si esto es una pérdida de memoria o no, así que quiero liberar todos los recursos para asegurarme de que no se trata de una fuga. Gracias


11
2017-07-03 19:15


origen


Respuestas:


Usa el truco de intercambio:

#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 );
}

13
2017-07-03 19:19



Considera usar el truco de intercambio:

vector (formas) .swap (formas);


1
2017-07-03 19:22