单例模式
懒汉式(线程不安全)
#include<iostream>
using namespace std;
class Singleton{
private:
Singeleton(){}
static Singleton *ptr;
public:
static Singleton * GetInstance(){
if(ptr==nullptr){
ptr=new Singleton();
}
return ptr;
}
};
Singleton * Singleton::ptr=NULL;
饿汉式(线程安全)
#include<iostream>
using namespace std;
class Singleton{
private:
Singeleton(){}
static Singleton *ptr;
public:
static Singleton * GetInstance(){
return ptr;
}
};
Singleton * Singleton::ptr=new Singleton();
加锁的懒汉式(线程安全)
#include<iostream>
#include<mutex>
using namespace std;
class Singleton{
private:
Singeleton(){}
static Singleton *ptr;
static std::mutex m_Mutex;
public:
static Singleton * GetInstance(){
if(ptr==nullptr){
m_Mutex.lock();
if(ptr==nullptr){
ptr=new Singleton();
}
m_Mutex.unlock();
}
return ptr;
}
};
Singleton * Singleton::ptr=NULL;