- Creational design pattern
- 生成するインスタンスは唯一としたいときに使う
- コンストラクタ,コピーコンストラクタ,代入演算子をprivateにする
- インスタンスは一度だけ静的オブジェクトとして生成
- getInstance()をstatic publicにする
- マルチスレッドのときは排他制御しないとダメ (OpenMP使った時に意識したアレか...)
header
class Singleton { private: static Singleton* instance_; Singleton(); Singleton(const Singleton& rhs); Singleton& operator=(const Singleton& rhs); public: ~Singleton(); static Singleton* getInstance(); } Singleton* Singleton::instance_ = nullptr;
source
Singleton::Singleton() { } Singleton::~Singleton() { if(instance_ !=) { delete instance_; } } Singleton::Singleton(const Singleton& rhs) { instance_ = rhs.instance_; } Singleton& Singleton::operator=(const Singleton& rhs) { instance_ = rhs.instance_; return *this; } Singleton* Singleton::getInstance() { if(instance_ == nullptr) { instance_ = new Singleton(); } return instance_; }