⽤C++实现单例模式⼏种写法
这篇⽂章主要介绍了C++实现单例模式实例详解的相关资料,需要的朋友可以参考下
设计模式之单例模式C++实现
⼀、经典实现(⾮线程安全)
class Singleton{
public:
static Singleton* getInstance();
protected:
Singleton(){}
private:
static Singleton *p;
};
Singleton* Singleton::p = NULL;
Singleton* Singleton::getInstance(){
if (NULL == p)
p = new Singleton();
return p;
}
⼆、懒汉模式与饿汉模式
懒汉:故名思义,不到万不得已就不会去实例化类,也就是说在第⼀次⽤到类实例的时候才会去实例化,所以上边的经典⽅法被归为懒汉实现;
饿汉:饿了肯定要饥不择⾷。所以在单例类定义的时候就进⾏实例化。
特点与选择由于要进⾏线程同步,所以在访问量⽐较⼤,或者可能访问的线程⽐较多时,采⽤饿汉实现,可以实现更好的性能。这是以空间换时间。在访问量较⼩时,采⽤懒汉实现。这是以时间换空间。
线程安全的懒汉模式
1.加锁实现线程安全的懒汉模式
class Singleton{
public:
static pthread_mutex_t mutex;
static Singleton* getInstance();
protected:
Singleton(){
pthread_mutex_init(&mutex);
}
private:
static Singleton* p;
};
pthread_mutex_t Singleton::mutex;
Singleton* Singleton::p = NULL;
Singleton* Singleton::getInstance(){
if (NULL == p){
pthread_mutex_lock(&mutex);
if (NULL == p)
p = new Singleton();
pthread_mutex_unlock(&mutex);
}
return p;
}
class Singleton{
public:
static pthread_mutex_t mutex;
static Singleton* getInstance();
protected:
Singleton(){
pthread_mutex_init(&mutex);
}
};
pthread_mutex_t Singleton::mutex;
Singleton* Singleton::getInstance(){
pthread_mutex_lock(&mutex);
static singleton obj;
pthread_mutex_unlock(&mutex);
return &obj;
}
饿汉模式(本⾝就线程安全)
class Singleton{
单例模式的几种实现方式
public:
static Singleton* getInstance();
protected:
Singleton(){}
private:
static Singleton* p;
};
Singleton* Singleton::p = new Singleton; Singleton* Singleton::getInstance(){ return p;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。