본문 바로가기

C++

[C++] vector, list, map에 할당한 메모리 해제

winapi 실습중에 objList 이름의 list를 만들어 동적으로 할당한 객체들을 저장했다. 이렇게 vector나 list에 메모리를 동적으로 할당한 객체를 저장하면 clear()을 사용하는 것으로는 동적으로 할당한 메모리가 해제되지 않는다. 그래서 메모리를 해제하기 위하여 다음과 같은 코드를 작성하였다.

 

template<typename T>
void Safe_Delete_VecList(T& p)
{
	typename T::iterator iter;
	typename T::iterator iterEnd = p.end();
	for (iter = p.begin(); iter != iterEnd; ++iter)
	{
		SAFE_DELETE((*iter));
	}
	p.clear();
}

 

SAFE_DELETE는 인수를 delete로 메모리 해제하고 NULL로 만든다. 그래서 반복자를 이용하여 vector, list의 모든 요소에 대하여 메모리 해제를 진행한다.

 

template<typename T>
void Safe_Delete_Map(T& p)
{
	typename T::iterator iter;
	typename T::iterator iterEnd = p.end();
	for (iter = p.begin(); iter != iterEnd; ++iter)
	{
		SAFE_DELETE(iter->second);
	}
	p.clear();
}

 

그리고 컨테이너가 map이라면 key값은 가만히 두고 value에 대하여 메모리 해제를 진행한다.