当前位置: 首页 > 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.jsqmd.com/news/1110298/

相关文章:

  • AI编排:企业级LLM落地的中枢神经系统
  • git合并提交信息
  • Java毕业设计-基于 SpringBoot 的校园部门资料管理系统的设计与实现 基于 SpringBoot 的学生组织活动管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • TPS65263与PIC18F86J15的三重降压电源方案设计
  • Startup安全生存指南:11条技术决策底层逻辑
  • 文本驱动的跨模态中枢架构:从语义锚定到工业级多模态对齐
  • IIM-42652与PIC18F46K42实现6DoF运动追踪方案
  • Claude语义压缩层消失:从过程可控到结果可验证的范式迁移
  • LLM Agent上岗体检与日常考勤:可落地的监控评估体系
  • STM32与DC-DC转换器的数字电源系统设计与实现
  • STM32与Si4732数字广播接收系统设计与优化
  • Llama 3参数效率革命:高质量数据如何替代参数堆砌
  • 中兴光猫终极解决方案:5分钟获取Telnet权限的完整指南
  • 多Agent系统的倒U型曲线与前瞻治理
  • 如何永久保存微信聊天记录:WeChatMsg数据转换完整指南
  • 弱到强泛化:用弱模型监督强AI的工程实践与PGR评估
  • 【新疆】《定制化软件开发费用测算实施指南》(T/XJSIA 036-2025)标准解读
  • 如何快速掌握7-Zip压缩软件:面向新手的完整免费压缩工具教程
  • C盘空间被pagefile.sys占满怎么办?虚拟内存迁移与分页文件设置实操
  • 如何用3步快速掌握阴阳师自动化脚本?
  • Speculative Decoding:LLM推理的无损加速新范式
  • 大模型编排层归零:Anthropic原生tool_use如何重构LLM应用架构
  • 从源码到部署:oeAware-manager完整安装指南与最佳实践
  • Llama 3架构深度解析:Tokenizer、GQA与RoPE的工程本质
  • 上下文工程:构建大模型的可调度信息操作系统
  • 大模型多token预测:一次生成4个token的工程化实践
  • 手把手教你集成商品条码查询API:从原理到实战
  • 我的汽车进步之路——网络管理
  • Diffie-Hellman密钥交换算法:从离散对数原理到Python工程实现详解
  • 机器都能秒读英文了,为什么你一打开原著还是想逃?