티스토리 뷰

프로세스 내에 유일한 객체가 되도록 하는 것을 싱글턴이라고 합니다.

template <typename T>
class Singleton
{
private:
	static T* m_pSingleton;

	Singleton()
	{
	}

	virtual ~Singleton()
	{ 
		m_pSingleton = 0; 
	}

public:
	static T* CreateInstance()
	{
		if(m_pSingleton == 0)
			m_pSingleton = new T;

		return m_pSingleton;
	}

	static T& Instance(void)
	{ 
		return (*m_pSingleton); 
	}

	static T* InstancePtr(void)
	{ 
		return (m_pSingleton);
	}
};

GPG 1권에 포함된 또 다른 Singleton

template <typename T>
class Singleton
{
	static T* m_pcPtr;
public:
	Singleton(void)
	{
		assert(!m_pcPtr) ;
		intptr_t offset = (intptr_t)(T*)1 - (intptr_t)(Singleton< T >*)(T*)1 ;
		m_pPtr = (T*)((intptr_t)this + offset) ;
	}
	~Singleton(void)
	{
		m_pPtr = 0 ;
	}
	static T& Instance(void)
	{
		return (*m_pPtr) ;
	}
	static T* InstancePtr(void)
	{
		return (m_pPtr) ;
	}
} ;
template <typename T> T* Singleton::m_pPtr = 0;


댓글