【QT】单例模式,Q_GLOBAL_STATIC 宏的使用和使用静态成员函数,eg:{简单的日志记录器}
2023-12-27 05:58:20
简单的日志记录器为例 。 创建一个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();
}
文章来源:https://blog.csdn.net/weixin_44939430/article/details/135225660
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!