- 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_;
}