C++
template singleton
디벨로프드림
2020. 7. 21. 15:24
반응형
코드
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를 받을수 있고 그 주소는 오직 하나의 주소만 가리키는걸 볼 수 있다.
반응형