#include <cassert>

template <typename T> class Singleton
{
	static T* ms_Singleton;

public:
	Singleton( void )
	{
		assert( !ms_Singleton );
		int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
		ms_Singleton = (T*)((int)this + offset);
	}
	~Singleton( void )
	{
		assert( ms_Singleton);
		ms_Singleton = 0;
	}

	static T& GetSingleton( void )
	{
		assert( ms_Singleton );
		return ( *ms_Singleton );
	}
	static T* GetSingletonPtr( void )
	{
		return ( ms_Singleton);
	}
	
};

template <typename T> T* Singleton <T>::ms_Singleton = 0;
크리에이티브 커먼즈 라이선스
Creative Commons License

'Study > C / C++' 카테고리의 다른 글

단일체 (Singleton) 코드  (2) 2008/07/05
const 키워드의 의미  (0) 2008/05/28
동적할당을 통한 행열의 곱셈, 역행열, 전치행열 구하기  (0) 2007/11/23
ASSERT, VERIFY, TRACE  (0) 2007/01/31
[C++] typedef  (0) 2006/11/02
posted by deviAk