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

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

使用 Q_GLOBAL_STATIC 宏

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

Logger 是要创建的类的名称。
logger 是实例的名称
#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();
}

使用静态成员函数
#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();
}

相关推荐

  1. C++this指针与静态成员函数使用方法

    2023-12-27 08:26:03       59 阅读
  2. .NET封装一个简单模式异步日志

    2023-12-27 08:26:03       45 阅读
  3. C#模式简单实现

    2023-12-27 08:26:03       53 阅读
  4. Qt使用模式读取xml文件

    2023-12-27 08:26:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-27 08:26:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-27 08:26:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-27 08:26:03       82 阅读
  4. Python语言-面向对象

    2023-12-27 08:26:03       91 阅读

热门阅读

  1. Mac_通过chmod处理文件权限

    2023-12-27 08:26:03       44 阅读
  2. 处理go中clientv3连接etcd包异常

    2023-12-27 08:26:03       55 阅读
  3. AWS的EC2之间ping不通,服务之间不通,怎么办

    2023-12-27 08:26:03       49 阅读
  4. 2023-全国智能驾驶测试赛-车联网安全专项赛WP (Re)

    2023-12-27 08:26:03       44 阅读
  5. python 读取pdf中的文本

    2023-12-27 08:26:03       48 阅读
  6. gRPC-Go基础(1)protoc的使用

    2023-12-27 08:26:03       53 阅读
  7. TensorFlow是什么

    2023-12-27 08:26:03       59 阅读
  8. LeetCode 26. 删除有序数组中的重复项

    2023-12-27 08:26:03       67 阅读
  9. 初试Kafka

    2023-12-27 08:26:03       58 阅读
  10. python大作业 写作思路

    2023-12-27 08:26:03       47 阅读