템플릿으로 RELEASE, DELETE 구현

 

#define 선언문으로 구현되어 있는 __RELEASE__, __DELETE__문을 템플릿으로 수정해보자.
템플릿의 자세한 설명은 시중에 좋은 C++ 책이 많으니 각자 뒤져보면 좋면좋겠다.

템플릿으로 구현된 리소스 해제 방법을 #define과 비교하는데서 설명을 마무리 짖겠다.

<<_RELEASE_ 선언>>

#define _RELEASE_(p) { if(p) { (p)->Release(); (p)=NULL; };}

template<class T> void _RELEASE_(T t)
{
        if( t )
        {
                t->Release();
                t = 0;
        }
}

<<_DELETE_ 선언>>

#define _DELETE_(p)  { if(p) { delete (p);     (p)=NULL; };}    

template<class T> void _DELETE_(T t)
{
        if( t )
        {
                delete t;
                t = 0;
        }
}



<<사용 방법에 대해서 알아보자>>

다음과 같이 변수가 선언되어 있다고 할 때 어떻게 사용하는지 비교해 보자.

LPDIRECT3D9             g_d3d        = NULL; // our main d3d8 interface
LPDIRECT3DDEVICE9       g_d3d_Device = NULL; // our d3d8 device
LPDIRECT3DVERTEXBUFFER9 g_VertexBuffer = NULL; // our VertexBuffer

해제시에는 다음과 같이 사용된다.

_RELEASE_ (g_VertexBuffer);
_RELEASE_ (g_d3d_Device);
_RELEASE_ (g_d3d);

_RELEASE_<LPDIRECT3DVERTEXBUFFER9>(g_VertexBuffer);
_RELEASE_<LPDIRECT3DDEVICE9>(g_d3d_Device);
_RELEASE_<LPDIRECT3D9>(g_d3d);

 

[펌]
http://www.moon-labs.com