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

Qt 单例模式的实现

1、静态对象

static MyClass* MyClass::Instance()
{
static MyClass inst;
return &inst;
}

过去很长一段时间一直都这么写,简单粗暴有效。但是直接声明静态对象会使编译出的可执行文件增大,也有可能出现其他的一些问题,所以利用了Qt自带的智能指针QScopedPointer和线程锁QMutex,改成了需要时才动态初始化的模式:

2、动态初始化

static MyClass* MyClass::Instance()
{
static QMutex mutex;
static QScopedPointer<MyClass> inst;
if (Q_UNLIKELY(!inst)) {
mutex.lock();
if (!inst) {
inst.reset(new MyClass);
}
mutex.unlock();
}
return inst.data();
}

既保证了线程安全又防止了内存泄漏,效率也没降低太多,简直完美。
可惜每次都要重复这么几行实在麻烦,于是写了一个模板类:

3、模板类

使用时:MyClass* inst = Singleton<MyClass>::Instance();
http://www.gsyq.cn/news/1622273.html

相关文章:

  • git合并提交信息
  • 文本驱动的跨模态中枢架构:从语义锚定到工业级多模态对齐
  • Llama 3参数效率革命:高质量数据如何替代参数堆砌
  • 【新疆】《定制化软件开发费用测算实施指南》(T/XJSIA 036-2025)标准解读
  • 弱到强泛化:用弱模型监督强AI的工程实践与PGR评估
  • Llama 3架构深度解析:Tokenizer、GQA与RoPE的工程本质
  • 机器都能秒读英文了,为什么你一打开原著还是想逃?
  • 我的汽车进步之路——网络管理
  • 切削液润滑不够导致刀具磨损快?
  • 揭秘高效Windows 10系统优化:智能去臃肿软件终极解决方案
  • Xshell连接虚拟机
  • 智慧路灯:原理、实际案例与成本效益分析
  • 2026金华黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • 国产麒麟搭建内网时间服务器:从踩坑到批量搞定数百台Win7实战
  • Obsidian Jupyter插件:在笔记中直接运行Python代码的终极解决方案
  • Python遗传算法实战:N皇后问题求解与工程化实现
  • 浏览器音频解密革命:Unlock Music深度技术解析与实战应用
  • 应对混乱的遗留系统 PRD:我是如何用 Claude Opus 4.8 搭建需求拆解与架构反推工作流的
  • 山西精品美缝做工
  • 如何用OpenRGB统一控制所有RGB设备:3步告别多软件混乱
  • 工业互联网的“自主底座”时代:从政策蓝图到技术落地
  • 企业级AI Agent平台架构设计:任务编排、工具调用与系统落地实战
  • Codex++ 安全边界探秘:从模型能力到风险防御
  • 嵌入式系统电源管理:TPS65263与PIC18F27K42三重降压方案
  • 上下文工程:大模型落地的决胜底层能力
  • Speculative Decoding:重构大模型推理的时间逻辑
  • english-12-word-26-07-01 top up my Wechat wallet . top up vs to up
  • Claude Managed Agents深度解析:会话即日志与沙箱化执行架构
  • Zephyr-7B深度解析:小参数模型如何实现工业级高效推理
  • STC3115电池监控芯片与PIC32MZ主控的硬件适配设计