본문 바로가기

개발/C&C++

[TEMPLATE] VECTOR / MAP - RELEASE MEMORY

728x90
반응형

< 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();
    }
}

728x90