본문 바로가기
Programming/C / C++

단일체 (Singleton) 코드

by deviAk 2008. 7. 5.
반응형
#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;
반응형

댓글2

  • Favicon of https://www.ikpil.com BlogIcon 최익필 2008.07.07 22:51 신고

    이 싱글톤은 좀 가독하기 어렵네;;
    (int) (Singleton <T>*) (T*) 1; 1을 Type형 포인터로 형변환후에 다시 싱글톤 템플릿형 클래스의 포인터로 형변환하고, 다시 int 형으로 형 변환 시키는건 .. 무슨 짓이야?
    답글