【QT】单例模式,Q_GLOBAL_STATIC 宏的使用和使用静态成员函数,eg:{简单的日志记录器}

简单的日志记录器为例 。 创建一个Logger类,该类负责记录应用程序的日志消息

使用 Q_GLOBAL_STATIC 宏

解析:Q_GLOBAL_STATIC 是一个 Qt 宏,用于创建全局静态实例。它确保在需要时只创建一次实例,而不管该实例是在哪个线程中创建的。

复制代码
Logger 是要创建的类的名称。
logger 是实例的名称
cpp 复制代码
#include <QCoreApplication>
#include <QMutex>
#include <QDebug>

class Logger
{
public:
    static Logger *instance()
    {
        if (!m_instance)
        {
            QMutexLocker locker(&m_mutex);
            if (!m_instance)
                m_instance = new Logger;
        }
        return m_instance;
    }

    void log(const QString &message)
    {
        qDebug() << "Log:" << message;
    }

private:
    Logger() {}
    ~Logger() {}

    Logger(const Logger &) = delete;
    Logger &operator=(const Logger &) = delete;

    static Logger *m_instance;
    static QMutex m_mutex;
};

Q_GLOBAL_STATIC(Logger, logger)

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 使用单例记录日志
    Logger::instance()->log("Application started");

    return a.exec();
}
使用静态成员函数
cpp 复制代码
#include <QCoreApplication>
#include <QDebug>

class Logger
{
public:
    static Logger &instance()
    {
        static Logger m_instance;
        return m_instance;
    }

    void log(const QString &message)
    {
        qDebug() << "Log:" << message;
    }

private:
    Logger() {}
    ~Logger() {}
//禁止对 Logger 类进行拷贝构造和赋值操作
    Logger(const Logger &) = delete;//禁止通过赋值方式创建新的实例
    Logger &operator=(const Logger &) = delete;// 禁止通过赋值方式创建新的实例
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 使用单例记录日志
    Logger::instance().log("Application started");

    return a.exec();
}
相关推荐
Hello.Reader4 分钟前
PySpark 依赖管理集群环境下如何分发 Python 包
开发语言·python
南境十里·墨染春水8 小时前
C++传记(面向对象)虚析构函数 纯虚函数 抽象类 final、override关键字
开发语言·c++·笔记·算法
无巧不成书02188 小时前
30分钟入门Java:从历史到Hello World的小白指南
java·开发语言
2301_797172758 小时前
基于C++的游戏引擎开发
开发语言·c++·算法
比昨天多敲两行9 小时前
C++ 二叉搜索树
开发语言·c++·算法
Birdy_x10 小时前
接口自动化项目实战(1):requests请求封装
开发语言·前端·python
海海不瞌睡(捏捏王子)10 小时前
C++ 知识点概要
开发语言·c++
桌面运维家11 小时前
VLAN配置进阶:抑制广播风暴,提升网络效率
开发语言·网络·php
一轮弯弯的明月11 小时前
Python基础-速通秘籍(下)
开发语言·笔记·python·学习
西西学代码11 小时前
Flutter---回调函数
开发语言·javascript·flutter