[TEMPLATE] VECTOR / MAP - RELEASE MEMORY
< TEMPLATE >
- 함수나 클래스가 개별적으로 다시 작성하지 않고도 각기 다른 수많은 자료형에서 범용적으로 사용 가능하도록 제작된 C++ 프로그래밍 언어의 기능.
- 템플릿의 종류에는 크게 함수 템플릿과 클래스 템플릿이 있음.
1) 함수 템플릿
- 여러 다른 자료형에 대하여 같은 역할을 하는 하나의 함수 계열을 하나의 템플릿으로 표현.
template <class identifier, ...> function_declaration;
template <typename identifier, ...> function_declaration;
2) 클래스 템플릿
- 클래스를 템플릿 변수에 따라 생성할 수 있게 하는 기능.
- 컨테이너 용도로 많이 쓰임.
template <class identifier, ...> class_declaration {};
template <typename identifier, ...> class_declaration {};
< 함수 템플릿 예제 >
1. RELEASE VECTOR
1) 정의
template <class A>
static const void RemoveVector(std::vector<A *> * pVec);
2) 구현
template <class A>
const void CUtil::RemoveVector( std::vector<A *> * pVec )
{
if (pVec == NULL)
return;
if (!pVec->empty())
{
for (int i = 0; i < (int)pVec->size(); i++)
{
A * pInfo = (*pVec)[i];
if (pInfo != NULL)
delete pInfo;
pInfo = NULL;
}
pVec->clear();
}
}
1. RELEASE MAP
1) 정의
template <class A, class B>
static const void RemoveMap(std::map<A, B *> * pMap);
2) 구현
template <class A, class B>
const void CUtil::RemoveMap( std::map<A, B *> * pMap )
{
if (pMap == NULL)
return ;
if (!pMap->empty())
{
std::map<A, B *>::iterator it = pMap->begin();
while (it != pMap->end())
{
B * pInfo = (*it).second;
if (pInfo != NULL)
delete pInfo;
pInfo = NULL;
it = (*pMap).erase(it);
}
pMap->clear();
}
}