C++ QT 单例模式

ops/2024/9/18 12:53:49/ 标签: 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.ppmy.cn/ops/102626.html

相关文章

【ceph学习】ceph如何进行数据的读写(3)

本章摘要 上文说到&#xff0c;osdc中封装请求&#xff0c;使用message中的相关机制将请求发送出去。 本文详细介绍osd服务端如何进行请求的接收。 osd初始化 osd启动时&#xff0c;定义了message变量ms_public&#xff0c;该变量绑定public网络&#xff0c;负责接收客户端的…

九泰智库 | 医械周刊- Vol.54

⚖️ 法规动态 国家药监局综合司发布医疗器械管理法草案征求意见稿 国家药监局综合司发布了《中华人民共和国医疗器械管理法&#xff08;草案征求意见稿&#xff09;》&#xff0c;公开征求意见&#xff0c;以加强医疗器械的管理并推动产业高质量发展。该草案共十一章190条&a…

【软考】网络安全性威胁

目录 1. 说明2. 被动攻击3. 主动攻击3.1 说明3.2 更改报文流3.3 拒绝服务3.4 伪造连接初始化3.4 恶意程序 4. 五个目标5. 例题5.1 例题1 1. 说明 1.计算机网络上的通信面临以下的四种威胁。2.截获(interception)&#xff1a;攻击者从网络上窃听他人的通信内容。3.中断(interru…

Ruby跨平台移动应用开发的新篇章

标题&#xff1a;Ruby跨平台移动应用开发的新篇章 在移动应用开发领域&#xff0c;Ruby作为一种高效灵活的编程语言&#xff0c;通过一系列框架和工具&#xff0c;成功地拓展了其应用边界。本文将详细介绍Ruby在移动应用开发中的应用&#xff0c;特别是跨平台解决方案&#xf…

力扣45.跳跃游戏II

class Solution {public int jump(int[] nums) {// 初始化步数为0int step 0;// 初始化当前能到达的最远位置为0int maxp 0;// 初始化下一个跳跃的边界位置为0int end 0;// 遍历数组&#xff0c;除了最后一个元素for(int i0;i<nums.length-1;i) {// 如果当前位置加上当前…

基于火锅餐饮大数据的精准推荐系统【协同过滤、前后台信息管理、万能推荐系统】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍项目展示项目过程大屏设计管理员界面用户界面数据库展示用户信息评论功能商家回复每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍…

计算机专业的真正的就业情况

首先听到计算机行业&#xff0c;大多数人岗位已经饱和&#xff0c;前端已死&#xff0c;程序员35岁危机。但是事实上这些认知都是片面的&#xff0c;今天由我来为大家分析计算机行业的内幕。 疫情过后&#xff0c;过内各种行业都受到了冲击&#xff0c;你们敢说除了体制内的行业…

react面试题七

一、请解释React的shouldComponentUpdate的作用。 shouldComponentUpdate 是 React 组件生命周期中的一个方法&#xff0c;用于决定一个组件在接收到新的 props 或 state 时是否应该重新渲染。这是 React 性能优化的一个关键工具&#xff0c;特别是在组件树变得复杂和深层时。 …

【JVM】垃圾收集器与GC日志(二)

垃圾收集器与GC日志 ZGC收集器(Z Garbage Collector,全并发、超低延迟 10ms) ZGC是一款JDK11中新加入的具有实验性质的低延迟垃圾收集器&#xff0c;ZGC可以说源自于Azul System公司开发的C4(Concurrent Continuously Compacting Collector)收集器 参考文章&#xff1a;http…

kylin-麒麟操作系统-安装内存泄露补丁-以及kylin-kms-activation.service服务不断重启解决思路

文章目录 前言1. 问题现象1.1 使用journalctl命令查看更详细的日志信息 2. 解决思路2.1 思路一&#xff1a;2.2 思路二&#xff1a;2.3 合理的解法: 3. 扩展-修复内存泄露3.1 查看自己使用的镜像3.2 到麒麟官网下载相应的补丁包3.3 安装步骤3.4 重启kylin-kms-activation.servi…

Linux 中的中断响应机制

Linux 中的中断响应机制是操作系统用来处理硬件中断的关键部分。硬件中断是外部设备向 CPU 发出的信号&#xff0c;表明需要处理某个事件&#xff08;如键盘输入、网络数据包到达、定时器到期等&#xff09;。Linux 内核通过中断响应机制来及时处理这些中断信号&#xff0c;并恢…

class 2: vue.js 3 模板语法和内置指令

目录 插值语法基本指令v-oncev-textv-htmlv-prev-cloakv-bind1. 绑定基本属性2. 绑定class属性 v-on1. 绑定事件2. 事件对象和传递参数3. 修饰符 条件渲染v-ifv-show 列表渲染v-for数组的更新检测 插值语法 多数情况下&#xff0c;Vue.js 3使用HTML模板(template)语法&#xf…

CF E. Best Pair

原题链接&#xff1a;Problem - E - Codeforces 题意&#xff1a;多测&#xff0c;每次给出n个数&#xff0c;m个数对。要求找到最大的f(i,j)&#xff0c;cnt(i)定义为i出现的次数&#xff0c;f(i,j)定义为(ij)*(cnt(i)cnt(j))&#xff0c;并且i和j不能是m里面出现的数对。 思…

Nginx负载均衡中动态资源缓存配置指南

在Nginx负载均衡配置中&#xff0c;合理地缓存动态资源可以显著提高网站性能和响应速度。然而&#xff0c;由于动态资源通常与用户的特定状态或会话相关&#xff0c;它们的缓存策略与静态资源有所不同。本文将详细介绍如何在Nginx中配置动态资源的缓存&#xff0c;包括缓存策略…

C/C++ 汇编基础知识概述

汇编基础对C/C帮助 底层细节: 内存管理&#xff1a;通过汇编语言&#xff0c;你可以看到变量是如何存储在内存中的&#xff0c;以及函数调用时栈帧是如何构建和销毁的。寄存器使用&#xff1a;了解哪些寄存器被用于传递参数、保存局部变量或临时结果&#xff0c;这有助于理解C/…

02:【江科大stm32】:按键控制LED

1、按键控制LED 代码如下&#xff1a; /*按键控制LED&#xff0c;2个按键分别控制2个LED&#xff0c;按键1&#xff08;1端连接GND&#xff0c;1端连接PB1&#xff09;按键2&#xff08;1端连接GND&#xff0c;1端连接PB2&#xff09;&#xff0c;所以按键引脚配置为上来输入…

【Python机器学习】NLP分词——利用分词器构建词汇表(一)

在NLP中&#xff0c;分词&#xff08;也称切词&#xff09;是一种特殊的文档切分过程。而文档切分能够将文本切分成更小的文本块或片段&#xff0c;其中含有更集中的信息内容。文档切分可以是将文本分成段落&#xff0c;将段落分成句子&#xff0c;将句子分成短语&#xff0c;或…

Simple RPC - 07 从零开始设计一个服务端(下)_RPC服务的实现

文章目录 PreRPC服务实现服务注册请求处理 设计&#xff1a; 请求分发机制 Pre Simple RPC - 01 框架原理及总体架构初探 Simple RPC - 02 通用高性能序列化和反序列化设计与实现 Simple RPC - 03 借助Netty实现异步网络通信 Simple RPC - 04 从零开始设计一个客户端&#…

格行“信号增强技术”引领行业创新,格行随身WiFi带你感受不一样的速度与激情,行业第一的随身WiFi并非浪得虚名!

近年来&#xff0c;随着市场保有量的不断提升与相关技术的不断扩展&#xff0c;我国随身WiFi市场已经到了发展质量更高的“2.0”阶段&#xff0c;消费者对随身WiFi的需求变得多元且“高级”。与之对应的供给端&#xff0c;品牌之间的竞争也从未停止&#xff0c;有的品牌选择卷价…

PTA L1-025 正整数A+B

L1-025 正整数AB&#xff08;15分&#xff09; 题的目标很简单&#xff0c;就是求两个正整数A和B的和&#xff0c;其中A和B都在区间[1,1000]。稍微有点麻烦的是&#xff0c;输入并不保证是两个正整数。 输入格式&#xff1a; 输入在一行给出A和B&#xff0c;其间以空格分开。…