#include <iostream>
using namespace std;
template <typename T>
class MySingleton
{
public:
MySingleton() {}
virtual ~MySingleton() {}
// 이 멤버를 통해서만 생성이 가능하다.
static T* GetSingleton()
{
// 아직 생성이 되어 있지 않으면 생성한다.
if (NULL == _Singleton) {
_Singleton = new T;
}
return (_Singleton);
}
static void Release()
{
delete _Singleton;
_Singleton = NULL;
}
private:
static T* _Singleton;
};
template <typename T> T* MySingleton<T> ::_Singleton = NULL;
// 싱글톤 클래스 템플릿을 상속 받으면서 파라미터에 본 클래스를 넘긴다.
class MyObject : public MySingleton<MyObject>
{
public:
MyObject() : _nValue(10) {}
void SetValue(int Value) { _nValue = Value; }
int GetValue() { return _nValue; }
private:
int _nValue;
};
void main()
{
MyObject* MyObj1 = MyObject::GetSingleton();
cout << MyObj1->GetValue() << endl;
// MyObj2는 Myobj1과 동일한 객체이다.
MyObject* MyObj2 = MyObject::GetSingleton();
MyObj2->SetValue(20);
cout << MyObj1->GetValue() << endl;
cout << MyObj2->GetValue() << endl;
}
빨간색으로 되있는 말 왜 동일한객체라는거?
졸라안보이네 .... 나만어렵나
싱글톤이자나
싱글톤이몬지몰라욤..첨봐서그럼..
잘봤습니다
myobj1, 2모두 static T* _Singleton
네이버, 구글에 싱글톤 검색해서 몇개 주르륵 봐보시고 돌려도 보세욤
이거 다중스레드에서 큰일날거 같은데....
if (NULL == _Singleton) { _Singleton = new T; } 이부분 2개 이상의 스레드 동시 진입 가능....
걍 내가 전에 올린거 쓰시져 그거 잘 돌아가는데
MyObj2랑 MyObj1이 상속?받아서 참조하는값이 같은거지 실제로 완전히 같은객체는 아니지않음?
모름니다...저 처음보는중ㅇ임 일단 검색해서 좀더보고옴
걍 대입한거잖아요 인스턴스를 받아서
개구리//저기에 뮤텍스 바르면 됨?
걍 meyers singleton 써
뮤텍쓰같은 것으로 쓸대없이 핸들 안만들고 atomic 함수 쓰면 댐
근데 일단 멀티스레드에서 돌림빵당할 클래스를 싱글톤으로 만드는거 자체가 별로가 아닐지
^0^