#include <mutex>
namespace Singleton1
{
class Singleton1
{
public:
~Singleton1(){};
static Singleton1 *GetInstance()
{
if (instance == NULL)
{
std::unique_lock<std::mutex> lock(m_Mutex);
if (instance == NULL)
{
instance = new Singleton1();
}
}
return instance;
};
private:
static Singleton1 *instance;
static std::mutex m_Mutex;
Singleton1(){};
};
Singleton1 *Singleton1::instance = nullptr;
}
namespace Singleton2
{
class Singleton2
{
public:
static Singleton2 &GetInstance();
private:
Singleton2();
~Singleton2();
};
Singleton2 &Singleton2::GetInstance()
{
static Singleton2 signal;
return signal;
}
}
namespace Singleton3
{
class Singleton3
{
public:
static Singleton3 *GetInstance()
{
return g_pSingleton;
};
static void deleteInstance();
private:
Singleton3(){};
~Singleton3(){};
static Singleton3 *g_pSingleton;
};
Singleton3 *Singleton3::g_pSingleton = new Singleton3;
}