2010-07-03 2 views
11

가능한 중복 :std :: vector에서 메모리를 해제 하시겠습니까?


reduce the capacity of an stl vector
Is this normal behavior for a std::vector?

난 당신이 vector.clear()를 호출 할 때 표준 : : 벡터가없는 '자유'메모리을 알고 있지만 내가 어떻게 할 수 이 작업을 수행? 일단 그것을 지우면 모든 리소스를 해제하기를 원하지만 그것을 파괴하고 싶지는 않습니다.

지금 현재 상황이 있습니다. 나는 OGLSHAPE라는 클래스를 가지고 있고 이것들을 벡터로 푸시한다. 한번 shapevec.clear()를 수행하면 모든 기억을 되 찾을 수 있었으면 좋겠다.하지만 그 중 3/4 만 되돌려 놓았다. 나는 이것이 누출이 아닌지 확신 할 수 있도록 모든 리소스를 해제하고자하므로 100 % 확실하지 않습니다.

#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

스왑 트릭을 사용

벡터 (모양) .swap (모양);

+1

닐, 'tmp'가있는 이유가 있습니까? 아니면 스타일과 개인 취향에 관한 질문입니까? – sbi

+0

@sbi 둘 다 :-) 그리고 나는 그것이 더 분명하다고 생각합니다. –

+3

@ 네일 : 예, 제 말씨가 나빴습니다. 나는 기술적 인 이유가 있는지 물어볼 생각이었습니다. 어쨌든, 답변 주셔서 감사합니다. _C Terseness Virus_에 의해 중독되었을 수도 있지만 실제로는 std :: vector () .swap (v)를 선호합니다. – sbi

1

스왑 트릭을 사용하여 고려하십시오 : 감사

관련 문제