본문 바로가기

C++ 2D

6. 싱글 톤 패턴

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