#include<iostream>
#include<assert.h>
#include<mutex>
#include<Windows.h>
using namespace std;
mutex mtx;
template<class T>
class singleton
{
public:
static singleton* GetSingleton()
{
if (single == NULL)
{
std::lock_guard<mutex> lck(mtx);
if (single == NULL)
{
singleton* tmp = new singleton;
MemoryBarrier();
single = tmp;
}
}
return single;
}
private:
singleton()
:_data(new T)
{}
singleton(const singleton&);
singleton operator=(const singleton&);
static singleton* single;
private:
T _data
};
template<class T>
singleton::singleton* single = NULL;
#include<iostream>
#include<assert.h>
#include<mutex>
#include<Windows.h>
using namespace std;
singleton<T>::GC gc;
template<class T>
class singleton
{
public:
static singleton GetSingleton()
{
static singleton single;
return &single;
}
static void DelSingleton()
{
delete single;
single = NULL;
}
class GC
{
~GC()
{
DelSingleton();
}
};
private:
singleton()
:_data(new T)
{}
singleton(const singleton&);
singleton operator=(const singleton&);
static singleton* single;
private:
T _data
};
template<class T>
singleton::singleton* single = new singleton;