一、简介
单例模式,指的是某一个类,只允许实例出一个对象存在。而实现单例模式有懒汉式和饿汉式。饿汉式指的是在创建类时就初始化好对象,,而懒汉式指的是在需要使用到对象实例时,才进行初始化对象。
二、实现方式
1、懒汉模式 第一次用到类实例的时候才会去实例化。
class singleton
{
protected:
singleton(){
}
private:
static singleton* p;
public:
static singleton* instance()
{
if (p == nullptr)
p = new singleton();
return p;
}
};
singleton* singleton :: p = nullptr;
上面这种简单的方式就是懒汉模式的单例模式,
但是这种方法是线程不安全的,
考虑两个线程同时首次调用 instance 方法
且同时检测到 p 是 nullptr 值,
则两个线程会同时构造一个实例给 p ,这是严重错误的。
解决:加锁
class singleton
{
protected:
singleton()
<