2013-03-22 3 views
0

나는 데이터 구조의 벡터를 만들 메모리 관리

template < class T1, class T2 > struct sometype 
{ 
std::vector <T1> v1; 
std::vector <T2> v2; 
T1 deriv[10]; 
}; 

과 같은 데이터 구조를 가지고

somevec.erase(somevec.begin(), somevec.end()); 
std::vector <sometype <T1, T2>>().swap (somevec); 

메모리를 회수 할 수 있습니까?

+2

개심을 "관용구에 맞게 축소"라고? 왜 그렇게하고 싶습니까? 어떤 문제를 해결하려고합니까? –

+0

@CodyGray sometype에서 사용하는 메모리를 재생합니다. 나는 약 1,000 만개의 sometypes/core를 임시 저장해야하는 거대한 문제를 해결하면서 기억을 보존하고 싶다. –

답변

3

당신은보다 더 잘 할 수 있습니다

somevec.erase(somevec.begin(), somevec.end()); 
std::vector <sometype <T1, T2>>().swap (somevec); 

당신이 할 필요가있다 : 당신이 비어있는 임시을 만들 수 있기 때문에

std::vector <sometype<T1, T2>>().swap(somevec); 

이입니다. 그런 다음 빈 내용을 실제 데이터 somevec으로 바꿉니다. 그런 다음 임시 변수가 삭제되고 변수가 할당 된 메모리가 회수됩니다 (메모리가 임시 변수로 스왑되기 때문에).

이 * 어떤 * 메모리를

+0

확인. 나는 다차원 포인터의 경우와 같이 특별한 것을 할 필요가 없다. –

+0

잘 작동해야합니다. 첫 번째 차원을 0으로 줄이기 때문입니다. 따라서 다른 모든 차원은 사라졌습니다. –

+0

내 혼란을 해결해 주셔서 감사합니다 :) –