Programming/디자인패턴
[디자인패턴]싱글톤
M0ca
2018. 1. 22. 09:33
반응형
싱글톤 패턴(singleton pattern)
생성자가 여러차례 호출되더라도 실제로 생성되는 객체는 하나다. 최초의 생성자가 생성된 이후, 생성자는 최초의 객체를 리턴한다.
더 자세한건 pdf로 확인바람!
#include <thread>
#include <mutex>
#include <iostream>
using namespace std;
class Singleton{
public:
static Singleton* getInstance(){
if(mInstance == nullptr){
std::lock_guard<std::mutex> guard(mtx);
if(mInstance == nullptr){
mInstance = new Singleton();
}
}
return mInstance;
}
void add(){ data++; }
int getData() const { return data; }
private:
Singleton(){} // 생성자
static std::mutex mtx;
static atomic<Singleton> *mInstance;
int data = 0;
};
std::mutex Singleton::mtx;
Singleton* Singleton::mInstance = nullptr;
int main()
{
Singleton *s1 = Singleton::getInstance();
Singleton *s2 = Singleton::getInstance();
Singleton *s3 = Singleton::getInstance();
cout << "s1 data: " << s1->getData() << '\n';
cout << "s2 data: " << s2->getData() << '\n';
cout << "s3 data: " << s3->getData() << '\n';
s1->add();
s2->add();
s3->add();
cout << "s1 data: " << s1->getData() << '\n';
cout << "s2 data: " << s2->getData() << '\n';
cout << "s3 data: " << s3->getData() << '\n';
return 0;
}
반응형