饿汉模式(线程安全,嵌套类析构)
class Singleton
{
private:
Singleton(){}
static Singleton* instance;
public:
static Singleton* GetInstance()//类加载的时候已经new了,可以直接返回
{
return instance;
}
private:
class GC
{
public:
~GC()
{
if(Singleton::instance)
{
delete Singleton::instance;
Singleton::instance = nullptr;
cout << "单例模式析构啦" << endl;
system("pause");
}
}
};
static GC gc;
};
Singleton* Singleton::instance = new Singleton();
Singleton::GC Singleton::gc;
懒汉模式(互斥锁,线程安全,嵌套类析构)
class Singleton
{
private:
Singleton(){}
static Singleton* instance;
static mutex mtx;
public:
static Singleton* GetInstance()//类加载的时候已经new了,可以直接返回
{
if (!instance)
{
mtx.lock();
Singleton* temp = new Singleton();
instance = temp;
mtx.unlock();
}
return instance;
}
private:
class GC
{
public:
~GC()
{
if(Singleton::instance)
{
delete Singleton::instance;
Singleton::instance = nullptr;
cout << "单例模式析构啦" << endl;
system("pause");
}
}
};
static GC gc;
};
Singleton* Singleton::instance = nullptr;
mutex Singleton::mtx;
Singleton::GC Singleton::gc;
静态变量(互斥锁,无需析构)
class Singleton
{
private:
Singleton(){}
static mutex mtx;
public:
static Singleton* GetInstance()
{
mtx.lock();
static Singleton instance;
mtx.unlock();
return &instance;
}
};
mutex Singleton::mtx;