概述
单例模式,顾名思义,设计一个类,在程序的运行过程中只能生成其一个实例,实现要点是将构造函数设为私有的。
代码实例
//单例模式
class SingleObject {
SingleObject() {}
static SingleObject *instance;
public:
static SingleObject *getInstance() {
if (instance == nullptr)
instance = new SingleObject();
return instance;
}
};
SingleObject *SingleObject::instance = NULL;
这种实现形式被称为懒汉式单例类,还有饿汉式单例类,即在静态区初始化
class SingleObject {
SingleObject() {}
static SingleObject *instance;
public:
static SingleObject *getInstance();
};
#include "SingleObject.h"
//在此处初始化
SingleObject* SingleObject::instance = new SingleObject();
SingleObject* SingleObject::getInstance(){
return instance;
}
此外在getinstance中加锁可实现线程安全:
//单例模式
class SingleObject {
SingleObject() {}
static SingleObject *instance;
public:
static SingleObject *getInstance() {
lock();
if (instance == nullptr)
instance = new SingleObject();
unlock();
return instance;
}
};
SingleObject *SingleObject::instance = NULL;
此外还有双重加锁形式,主要优化了以上单重锁每次调用getInstance()都要加锁一次的性能消耗。
此外c++11还有一种极为简单的写法,能够保证线程安全:
//单例模式
class SingleObject {
SingleObject() {}
static SingleObject *instance;
public:
static SingleObject *getInstance() {
static std::once_flag oc;
std::call_once(oc, [&] () { instance = new SingleObject(); });
return instance;
}
};