2010-07-03 13 views
11

mögliche Dubletten:
reduce the capacity of an stl vector
Is this normal behavior for a std::vector?Erzwinge einen std :: vector, um seinen Speicher freizugeben?

Ich weiß, dass std :: Vektoren nicht 'frei' den Speicher, wenn Sie vector.clear() aufrufen, aber wie kann ich mach das? Ich möchte, dass es alle Ressourcen freigibt, sobald ich es gelöscht habe, aber ich möchte es nicht zerstören.

Hier ist, was gerade passiert. Ich habe eine Klasse namens OGLSHAPE und ich schiebe diese in einen Vektor von ihnen. Ich hatte gehofft, dass ich, sobald ich shapevecclear() hatte, mein ganzes Gedächtnis zurückbekommen würde, aber nur 3/4 davon zurückbekam. Ich bin nicht 100% sicher, ob dies ein Speicherleck ist oder nicht, also möchte ich alle Ressourcen freigeben, um sicherzustellen, dass es kein Leck ist. Dank

Antwort

13

den Swap-Trick:

#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, gibt es einen Grund, warum du 'tmp' hast oder ist das nur eine Frage von Stil und persönlichen Vorlieben? – sbi

+0

@sbi Beide :-) Und ich denke, es ist klarer. –

+3

@Neil: Ja, mein Wortlaut war schlecht, ich wollte fragen, ob es einen technischen Grund gibt. Wie auch immer, danke fürs Beantworten. Ich könnte durch den _CTerseness Virus_ vergiftet worden sein, aber ich bevorzuge tatsächlich 'std :: vector () .swap (v)'. – sbi

1

Betrachten Sie den Swap-Trick:

Vektor (Formen) .swap (Formen);

Verwandte Themen