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

C++ QT 单例模式

在 C++ 中,使用 Qt 框架实现单例模式可以确保一个类只有一个实例,并提供一个全局访问点。以下是一个简单的 C++ Qt 单例模式实现示例。

1. 饿汉式单例模式

饿汉式单例模式在类加载时就初始化单例对象。

// MySingleton.h
#ifndef MYSINGLETON_H
#define MYSINGLETON_H#include <QObject>class MySingleton : public QObject
{Q_OBJECTpublic:// 获取单例实例的静态方法static MySingleton& instance(){static MySingleton instance;return instance;}// 禁止拷贝构造和赋值MySingleton(const MySingleton&) = delete;MySingleton& operator=(const MySingleton&) = delete;signals:// 可以定义一些信号public slots:// 可以定义一些槽函数private:// 私有构造函数和析构函数MySingleton() {}~MySingleton() {}
};#endif // MYSINGLETON_H

2. 懒汉式单例模式

懒汉式单例模式在第一次调用 instance() 时才初始化单例对象。

// MySingleton.h
#ifndef MYSINGLETON_H
#define MYSINGLETON_H#include <QObject>
#include <QMutex>
#include <QScopedPointer>class MySingleton : public QObject
{Q_OBJECTpublic:// 获取单例实例的静态方法static MySingleton& instance(){static QMutex mutex;if (!m_instance){QMutexLocker locker(&mutex);if (!m_instance){m_instance.reset(new MySingleton());}}return *m_instance;}// 禁止拷贝构造和赋值MySingleton(const MySingleton&) = delete;MySingleton& operator=(const MySingleton&) = delete;signals:// 可以定义一些信号public slots:// 可以定义一些槽函数private:// 私有构造函数和析构函数MySingleton() {}~MySingleton() {}static QScopedPointer<MySingleton> m_instance;
};#endif // MYSINGLETON_H
// MySingleton.cpp
#include "MySingleton.h"QScopedPointer<MySingleton> MySingleton::m_instance(nullptr);

3. 使用示例

在任何地方使用单例:

#include "MySingleton.h"// 获取单例实例
MySingleton& singleton = MySingleton::instance();

关键点总结:

线程安全:Qt 中提供了 QMutex 和 QMutexLocker 来确保线程安全。
防止拷贝:通过删除拷贝构造函数和赋值运算符来防止拷贝。
全局访问:通过 instance() 方法获取单例实例。
示例展示了如何在 Qt 中实现单例模式,包括线程安全的懒汉式实现和直接初始化的饿汉式实现。


http://www.mrgr.cn/news/9439.html

相关文章:

  • leetcode73. 矩阵置零,简单模拟
  • springboot service如何动态读取外部配置文件
  • 【小程序】小程序的eventBus
  • 状态压缩DP---最短Hamilton路径
  • [Day 63] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 【Remi Pi开发环境搭建】主要包括虚拟机的创建以及开发板镜像的烧录
  • 6G网络的关键技术、应用前景与挑战并存的科技征途
  • Maven-08.依赖管理-生命周期
  • STM32(七):定时器——输入捕获
  • 异常处理 || 抛出 || 捕获 || noexcept || 异常类
  • C语言第17篇
  • Android中实现WebView的秒开场景及方案
  • OSPF与BGP防环机制总结
  • flutter开发小技巧
  • ffplay源码分析(二)结构体VideoState
  • 电脑U口管理软件分享|U口管理软件哪个好?
  • 交叉编译Qt5.12.8附带编译opengl
  • 编程思想:编程范式:面向对象
  • 递归搜索与回溯专题篇一
  • 目标检测多模态大模型实践:貌似是全网唯一Shikra的部署和测试教程,内含各种踩坑以及demo代码