一、概述
一个类只有一个对象,有利于我们协调系统整体的行为。
二、引入头文件
#include <QMutex>
三、介绍
由于一个类只能拥有一个实例化的对象,因此不能用 new 来新建对象,那么要把构造函数声明为私有的。
GetInstance 是用来获取单例对象的一个方法。
在类中添加一个私有静态成员变量用于保存单例实例, 如果单例的初始值为 NULL,那么我们就构建单例对象然后返回,这个方法称为懒汉模式。
QMutex 的目的是同一时间只有一个线程可以访问。
四、代码
4.1 头文件
/// @class 单例类
class Singleton
{
public:
/// @brief 获取单例对象
static Singleton* GetInstance();
private:
/// @brief 构造函数私有声明
Singleton();
static Singleton *m_instance; // 持有唯一实例,保证全局唯一性
static QMutex m_mutex; // 实例互斥锁
}
4.2 cpp 文件
// ------------------------
QMutex Singleton::m_mutex;
Singleton* Singleton::m_instance = NULL; // 懒汉模式
// --------------------------------
Singleton* Singleton::GetInstance()
{
// 双重检测机制
if(m_instance == NULL)
{
// 加互斥锁
QMutexLocker locker(&m_mutex);
// 第二次检测
if(!m_instance)
{
m_instance = new Singleton;
}
}
return m_instance;
}