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 );
.......
}
'알고리즘 & 자료구조 > 알고리즘&자료구조' 카테고리의 다른 글
이중리스트의 사용, 마지막 노드의 순환 (0) | 2012.10.31 |
---|---|
이중 링크드 리스트 [doubly linked list] (0) | 2012.10.31 |
빅오표기법/빅오분석법(Big O Notation) (0) | 2012.10.31 |
힙(Heap) 트리와 정렬 (우선순위 큐) (0) | 2012.10.31 |
정렬 알고리즘 - 힙 정렬(Heap Sort) (0) | 2012.10.31 |