本文主要用Qt5.9的C++实现单例模式,分别有饿汉单例模式和懒汉单例模式。单例模式特点是拥有一个全局入口,能够实现唯一的实例对象。实现的核心思想是调用该类的静态成员函数,然后该静态成员函数返还一个指向该类的指针变量。具体的总结如下所述。
一、饿汉单例模式(博主用的是这个)
饿汉单例模式的优点是线程安全,可以用在多线程里面。缺点是在创建类时实例对象,浪费内存。具体的创建要点如下:(创建私有类实例对象,然后用一个公共函数接口调用该私有实例对象)
a1.首先新建一个c++类,基类选择QObject,命名为QHungrySingleton。
a2.将构造函数变为私有函数,避免new的时候构造一个实例!!!
a3.创建一个静态私有的QHungrySingleton的实例对象,如static QHungrySingleton *m_instance;
a4.创建一个公共的函数,调用上面创建的私有实例对象;
a5.实例对象时进行new,然后公共调用函数直接返回该对象指针。
调用时先加头文件,然后用如下方式调用:
QHungrySingleton::GetInstance()->hungrySingletonTest();
代码如下:
hungrysingleton.h
#ifndef HUNGRYSINGLETON_H
#define HUNGRYSINGLETON_H
#include <QObject>
class QHungrySingleton : public QObject
{
Q_OBJECT
public:
static QHungrySingleton* GetInstance();
void hungrySingletonTest();
private:
static QHungrySingleton *m_instance;
QHungrySingleton();
};
#endif // HUNGRYSINGLETON_H
hungrysingleton.cpp
#include "hungrysingleton.h"
#include <QDebug>
QHungrySingleton *QHungrySingleton::m_instance = new QHungrySingleton();
QHungrySingleton *QHungrySingleton::GetInstance()
{
return m_instance;
}
void QHungrySingleton::hungrySingletonTest()
{
qDebug()<<tr("调用了饿汉单例模式!!!");
}
QHungrySingleton::QHungrySingleton()
{
}
二、懒汉单例模式(定义时跟饿汉模式一样,实例有点区别)
懒汉单例模式的有点是在调用类时实例对象,节省内存。缺点是线程不安全,用在多线程时需要加锁。当用懒汉单例模式用于多线程时,可以参考这篇博客:https://blog.youkuaiyun.com/liang19890820/article/details/61615495
具体的创建要点如下:(创建私有类实例对象,然后用一个公共函数接口调用该私有实例对象)
a1.首先新建一个c++类,基类选择QObject,命名为QIdlerSingleton。