반응형


http://cafe.naver.com/jzsdn/2468




#ifndef __ICMSINGLETON_H
#define __ICMSINGLETON_H

#include <stdio.h>
#include <WINDOWS.H>

template< class C >
class ISingleTon
{
public:
ISingleTon()
{
if( !m_pInstance )
{
int nOffset = ( int )( C* )1 - ( int )( ISingleTon< C >* )( C* )1;
m_pInstance = ( C* )( ( int )this + nOffset );
}
}
virtual ~ISingleTon() {}

static bool CreateInstance()
{
if( !m_pInstance )
{
m_pInstance = new C;
}

if( m_pInstance )
return true;
return false;
}

static void ReleaseInstance()
{
SAFE_DELETE( m_pInstance );
}

static C* GetInstance()
{
return m_pInstance;
}

protected:
static C* m_pInstance;
};

template< class C >C *ISingleTon< C >::m_pInstance = NULL;

#endif

이건 싱클톤 패턴을 템플릿으로 구성한 인터페이스 클래스입니다.( Game Programming Gems에서 봤었던걸로 기억합니다. )

일일이 클래스에 GetInstance()와 ReleaseInstance()를 추가하는 수고를 덜수 있습니다.

CreateInstance()를 따로 둔건 쓸데없는 걱정일지도 모르지만 GetInstance()에서 m_pInstance의

유효성체크를 하는부분이 거슬려서입니다.

사용법은

#include "ISingleTon.h"

class CSession;

class CSessionManager : public ISingleTon < CCMSessionManager >

{

public:

CSessionManager();
virtual ~CSessionManager();

void AddSession( CSession* pSession );

......

}

#define g_SessionMng CSessionManager::GetInstance()

main()

{

CSessionManager::CreateInstance();

CSession* pSession = new CSession;

g_SessionMng->AddSession( pSession );

.......

}

반응형

+ Recent posts