当前位置: 首页 > web >正文

QT单例模式简单讲解与实现

单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。在QT开发中,单例模式常用于管理全局资源,如配置管理、日志系统等。

最简单的QT单例实现

方法一:静态局部变量实现(C++11及以上推荐)

class Singleton
{
public:// 获取单例实例的静态方法static Singleton& getInstance(){static Singleton instance;  // 线程安全的静态局部变量(C++11起)return instance;}// 示例方法void doSomething(const QString &message){qDebug() << "Singleton is doing something"<<message;}private:// 私有构造函数防止外部实例化Singleton() {}// 防止复制和赋值Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};

​使用方式:​

Singleton::getInstance().doSomething("Message 1");

如果你需要多次使用同一个实例,可以这样:

Singleton &singleton= Singleton::getInstance();
singleton.doSomething("Message 1");
singleton.doSomething("Message 2");

方法二:指针实现(兼容旧版C++)

class Singleton
{
public:static Singleton* getInstance(){if (!instance) {instance = new Singleton();}return instance;}void doSomething(){qDebug() << "Singleton is doing something";}private:Singleton() {}static Singleton* instance;
};// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;

​注意:​​ 这种方法不是线程安全的,如果需要线程安全,需要加锁。

QT特有的单例实现(Q_GLOBAL_STATIC)

QT提供了一个宏来更方便地实现单例:

#include <QGlobalStatic>Q_GLOBAL_STATIC(Singleton, singletonInstance)class Singleton
{
public:void doSomething(){qDebug() << "Singleton is doing something";}private:Singleton() {}friend class QGlobalStatic<Singleton>;
};

​使用方式:​

singletonInstance()->doSomething();

为什么使用单例模式?

  • 控制资源访问(如配置文件)
  • 避免重复创建消耗资源的对象
  • 提供全局访问点

注意事项

  • 单例模式可能使代码更难测试
  • 过度使用会导致代码耦合度高
  • 考虑线程安全问题

以上就是在QT中实现单例模式的几种常见方法,第一种方法(静态局部变量)是最简单且线程安全的实现方式,推荐使用。

http://www.xdnf.cn/news/8774.html

相关文章:

  • 汇量科技前端面试题及参考答案
  • 电路设计接口协议大全
  • 科技赋能,创新不止,建投数据获批三项算力服务软件著作权
  • el-input 按回车失去焦点
  • 【java】小练习--零钱通
  • 第十四章:数据治理之数据源:数据源的数据接入、业务属性梳理及监控
  • 人形机器人硬件技术剖析:部件、难点与突破路径
  • vocabulary in code
  • AI大模型(三)openAI大模型应用
  • [爬虫知识] IP代理
  • 2021-10-28 C++判断完全平方数
  • NVMe高速传输之摆脱XDMA设计1
  • 9:多线程(2)
  • 再论自然数全加和-2
  • 开疆智能Profinet转Profibus网关连接Type8644自动化控制系统案例
  • Pr -- 耳机没有Pr输出的声音
  • 算法笔记·数学·约数之和
  • PCIE 4.0 vs PCIE 5.0固态硬盘——区别、科普与选购场景全解析
  • yolov11使用记录(训练自己的数据集)
  • 无损图片压缩 本地处理 批量处理提升效率 无需联网+无广告
  • 代码混淆技术的还原案例
  • LangChain
  • [软件测试_5] 设计用例 | 等价法 | 判定表法 | 正交法(allpairs.exe)
  • 【人工智能】AI的炼金术:大模型训练的秘密配方
  • C语言-枚举
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.concat():轴向拼接
  • wan2.1代码笔记
  • 简说IMM
  • AI 理论- 模型优化 - 注意力机制
  • 整平机技术进阶:从原理到实战的深度解析