반응형
코드
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를 받을수 있고 그 주소는 오직 하나의 주소만 가리키는걸 볼 수 있다.
반응형
'C++' 카테고리의 다른 글
string vs stringstream (0) | 2020.09.04 |
---|---|
template _ class template, function template, explicit instantiation (0) | 2020.03.16 |
c++ typeid 연산자 (0) | 2020.03.16 |
References(L-value reference, R-value reference) (0) | 2020.03.13 |
C++ lvalue, rvalue, xvalue, glvalue, prvalue (0) | 2020.03.12 |