Singleton Pattern
1개의 인스턴스만 가져야 하는 상황에 사용.
상속이 가능해서 부모클래스를 만들고 싱글톤을 적용해야하는 클래스에 상속 가능
#pragma once
1.// 클래스 템플릿 선언
template <typename T>
class singletonBase
{
protected:
2. // 템플릿 타입 변수 선언
static T* singleton;
3. // 생성자 소멸자의 접근지정자를 protected로 만들어 아무데서나 못쓰게 만듬
singletonBase() {}
~singletonBase() {}
public:
4. // 템플릿 생성 함수 선언
static T* getSingleton();
5. // 템플릿 소멸 함수 선언
void releaseSingleton();
};
6. //변수 초기화
template <typename T>
T* singletonBase<T>::singleton = 0;
7. //템플릿 생성 함수 정의
template<typename T>
inline T * singletonBase<T>::getSingleton()
{
if (!singleton) singleton = new T;
return singleton;
}
8. //템플릿 소멸 함수 정의
template<typename T>
inline void singletonBase<T>::releaseSingleton()
{
if (singleton)
{
delete singleton;
singleton = nullptr;
}
}
------------------------------------------
2.static T* singleton;
3.singletonBase() {}
~singletonBase() {}
protected 를 걸어 상속자 이외엔 사용 못하게 걸음
4. static T* getSingleton();
5. void releaseSingleton();
6.템플릿 변수에 0을 넣어 초기화
7.T* singletonBase<T>::singleton = 0; 템플릿을 생성할 함수를 정의
if (!singleton) singleton = new T;
이 부분에서 6번에 0을 넣어 초기화 해서 singleton이 건들여지지 않았다면 0일테니
singleton를 정적 선언을 해줘서 템플릿을 하나 만듬.
이렇게 하면 템플릿이 더 늘어나지 않음.
8.singleton은 정적 할당을 했기 때문에 알아서 사라지지 않기 때문에 delete를 이용해서 비워줌
'C++ 2D' 카테고리의 다른 글
8. 원과 사각형 (0) | 2021.06.08 |
---|---|
7. 시간과 입력 (0) | 2021.05.31 |
5. 마우스 (0) | 2021.05.28 |
3.Rect, WM, VK, InvalidateRect(,,) (0) | 2021.05.26 |
2. 텍스트 및 도형 출력 (0) | 2021.05.26 |