2010-07-03 12 views
11

duplicados posibles:
reduce the capacity of an stl vector
Is this normal behavior for a std::vector?¿Forzar un std :: vector para liberar su memoria?

sé que std :: vectores no 'libre' la memoria cuando se llama 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 en este momento. Tengo una clase llamada OGLSHAPE y las inserto en un vector de ellas. 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

Respuesta

13

usar el truco 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, ¿hay alguna razón por la que tengas 'tmp' o es solo una cuestión de estilo y preferencias personales? – sbi

+0

@sbi Ambos :-) Y creo que es más claro. –

+3

@Neil: Sí, mi redacción era mala, quise preguntar si hay una razón _technical_. De todos modos, gracias por responder. Podría haberme envenenado con el virus _C Terseness_, pero en realidad prefiero 'std :: vector () .swap (v)'. – sbi

1

considerar el uso del truco swap:

vector (formas) .swap (formas);

Cuestiones relacionadas