2010-07-03 18 views
11

Możliwe duplikaty:
reduce the capacity of an stl vector
Is this normal behavior for a std::vector?Wymusić std :: vector, aby zwolnić jego pamięć?

wiem, że std :: wektory nie 'wolne' pamięć podczas rozmowy vector.clear(), ale jak mogę Zrób to? Chcę, aby uwolnił wszystkie swoje zasoby, gdy tylko je wyczyści, ale nie chcę ich zniszczyć.

Oto, co dzieje się teraz. Mam klasę o nazwie OGLSHAPE i popycham je do ich wektor. Miałem nadzieję, że raz zrobiłem shapevec.clear() Odzyskałem całą moją pamięć, ale dostałem tylko 3/4 tego zwrotu. Nie jestem w 100% pewien, czy jest to przeciek pamięci, czy nie, więc chcę uwolnić wszystkie zasoby, aby upewnić się, że nie jest to przeciek. Dzięki

Odpowiedz

13

Użyj sztuczki wymiany:

#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, czy istnieje powód, dla którego używasz 'tmp' lub jest to tylko kwestia stylu i osobistych preferencji? – sbi

+0

@sbi Obie :-) I myślę, że jest jaśniejsza. –

+3

@Neil: Tak, moje sformułowanie było złe, chciałem zapytać, czy istnieje jakiś powód techniczny. W każdym razie, dzięki za odpowiedź. Mogłem zostać otruty przez _C Terseness Virus_, ale tak naprawdę wolę 'std :: vector () .swap (v)'. – sbi

1

rozważyć użycie trick wymiany:

wektor (kształty) .swap (kształty);