오직 한 개의 클래스 인스턴스만 갖도록 보장, 이에 대한 전역적인 접근점을 제공
정확히 하나의 인스턴스만을 갖도록 하는 것이 좋은 클래스가 있다. ex) 파일 시스템, 윈도우 관리자, ...
클래스 자신이 자기의 유일한 인스턴스로 접근하는 방법을 자체적으로 관리하게 한다. 이 클래스는 또 다른 인스턴스가 생성되지 않도록 할 수 있고, 클래스 자신이 그 인스턴스에 대한 접근 방법을 제공.
class Singleton
{
private:
Singleton(){};
Singleton(const Singleton& other);
static Singleton instance;
public:
static Singleton* GetInstance()
{
return instance;
}
};
Singleton* Singleton::instance = nullptr;
//사용법
Singleton::GetInstance()
즉, 어떠한 전역 객체의 생성자에서 위 싱글톤을 참조하려할 때, 싱글톤 객체가 생성되기 이전에 발생할 수 있다. 때문에 객체의 생성 시점을 변경해야함.
위에 나온 문제점을 피해가도록 프로그래밍.
Effective C++에서 나온 늦은 초기화를 사용한 싱글톤을 만든다.
class DynamicSingleton
{
private:
DynamicSingleton() {};
DynamicSingleton(const DynamicSingleton& other);
~DynamicSingleton() {};
static DynamicSingleton* instance;
public:
static DynamicSingleton* GetInstance()
{
if(instance == NULL) instance = new DynamicSingleton();
return instance;
}
};
DynamicSingleton* DynamicSingleton::instance = nullptr;
//사용법
DynamicSingleton::GetInstance()