Singleton模式
单例模式保证一个类只会有一个实例。
class Singleton1{
public:
static Singleton1 *get(){
if(m_p == nullptr){
m_p = new Singleton1(0);
}
return m_p;
}
void SetNum(int n){num = n;}
int GetNum() const {return num;}
private:
Singleton1(int n):num(n){} //other people cannot create instance
static Singleton1 *m_p;
int num;
};
Singleton1 *Singleton1::m_p = nullptr;
void DesignPatternTest(){
Singleton1::get()->SetNum(10);
cout << Singleton1::get()->GetNum() << endl;
}
测试一下,
10
这种实现只能用于单线程环境,多个线程可能会竞争着去创建实例。加锁可以防止竞争的出现。
mutex m_lock;
class Singleton1{
public:
static Singleton1 *get(){
if(m_p == nullptr){
m_lock.lock();
if(m_p == nullptr)
m_p = new Singleton1(0);
m_lock.unlock();
}
return m_p;
}
.....
控制加锁的范围可以降低加锁对性能的影响。