반응형

코드

template <typename T>
class SingleTonBase
{
private:
	static T* instance;

public:
	static T* GetInstance()
	{
		if (!instance)
		{
			instance = new T;
		}
		return instance;
	}
    
    	static void DeleteInstance()
	{
		if (instance)
		{
			delete instance;
            		instance = nullptr;
		}
	}

protected:
	SingleTonBase(){}
	virtual ~SingleTonBase(){}

public:
	SingleTonBase(const SingleTonBase&) = delete;
	SingleTonBase& operator = (const SingleTonBase&) = delete;
};

template<typename T>
T* SingleTonBase<T>::instance = nullptr;



//클래스에서 상속을 받고 friend 키워드를 통해 적용
class MyClass : public SingleTonBase<MyClass>
{
	friend class SingleTonBase<MyClass>;
private:
	MyClass() {};
	~MyClass() {};

public:
	void print(HDC a_hDC, int a_x, int a_y)
	{
		std::wstringstream wss;
		wss << L"MyClass : " << (int)GetInstance();
		TextOut(a_hDC, a_x, a_y, wss.str().c_str(), wss.str().length());
	}
};

 

테스트

같은 주소를 가리키고 있다, 즉 언제나 GetInstance() 통해서만 instance를 받을수 있고 그 주소는 오직 하나의 주소만 가리키는걸 볼 수 있다.

반응형

+ Recent posts