Qt:实现单例模式

前言

记录一下。

正文

单例模式根据实现方式和应用场景在Qt中可以分为以下几种类型:

1. 懒汉式单例

懒汉式单例在第一次使用时才创建实例,延迟了对象的初始化。懒汉式单例分为线程安全和线程不安全两种实现方式。

  • 线程不安全的懒汉式单例

    • 在第一次调用 getInstance() 时创建实例,未实现线程安全保护,多线程情况下可能导致多个实例被创建。
  • 线程安全的懒汉式单例 :(最常用)

    • 在第一次调用时创建实例,使用锁机制确保在多线程环境中只创建一个实例。

优点 :实例不会过早创建,节省内存。
缺点:在多线程环境下需要额外处理线程安全问题,可能影响性能。

2. 饿汉式单例

饿汉式单例在程序启动时就创建实例,实例的生命周期与程序相同。

  • 实例在类加载时就创建,适合频繁使用的场景。
  • 饿汉式单例的线程安全是由于其在类加载时由编译器自动处理,不需要额外的锁机制。

优点 :简单直接,线程安全,适合在启动时需要立即使用的场景。
缺点:无论是否使用该实例,程序启动时就会创建,可能浪费资源。

3. 静态局部变量单例 (最简单)

C++11 标准引入了线程安全的静态局部变量初始化机制,可以用于简化单例的实现。在这种方法下不需要显示的管理内存。

  • getInstance() 方法中,使用一个静态局部变量来保存单例对象。C++11 保证了静态局部变量的线程安全初始化。

优点 :简单且线程安全,不需要显式加锁。
缺点:C++11 及以上标准才支持。

4. 使用 Qt 的 Q_GLOBAL_STATIC

这是 Qt 提供的一个特殊实现,通过 Q_GLOBAL_STATIC 宏创建一个全局静态对象,自动管理线程安全性。

优点 :适合 Qt 程序,线程安全,简化了实现逻辑。
缺点:只能用于 Qt 环境中。

实现

具体实现参考我的其它文章
Qt:懒汉单例(附带单例使用和内存管理)
Qt:饿汉单例(附带单例使用和内存管理)
Qt:静态局部变量实现单例(附带单例使用和内存管理)
Qt:Q_GLOBAL_STATIC实现单例(附带单例使用和内存管理)

小结

如有错误请指正。

相关推荐
LuDvei3 小时前
ubuntu环境下qt打包
linux·数据库·qt·ubuntu
小短腿的代码世界5 小时前
Qt事件驱动高频交易引擎架构:从事件循环到零延迟通信的完整实现
qt·架构
深蓝海拓6 小时前
用HSL颜色系统改造qdarkstyle样式表库
前端·笔记·python·qt·学习
czxyvX6 小时前
3-Qt常用控件
qt
努力努力再努力wz8 小时前
【Qt 入门系列】从应用场景到开发环境:建立对 Qt 的第一层认知
c语言·开发语言·数据库·c++·b树·qt·缓存
LNN20229 小时前
半导体设备上位机 Qt 实现计划
开发语言·数据库·qt
码农小韩10 小时前
QT学习记录(三)——C++学习基础(三)
开发语言·c++·qt·学习·算法·嵌入式软件
buhuizhiyuci10 小时前
【QT-百日筑基篇】找寻安静的落脚处,选择合适的功法进行修炼-QT深度了解对象树的特性
开发语言·qt
CSCN新手听安10 小时前
【Qt】系统相关(二)鼠标事件的处理,鼠标的按下,释放,双击,移动,滚轮滚动事件的处理
开发语言·c++·qt
小短腿的代码世界21 小时前
QtAV音视频播放实战深度解析:从零构建高性能跨平台播放器
qt·音视频