C++ QT 单例模式

打印 上一主题 下一主题

主题 665|帖子 665|积分 1995

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

饿汉式单例模式在类加载时就初始化单例对象。
  1. // MySingleton.h
  2. #ifndef MYSINGLETON_H
  3. #define MYSINGLETON_H
  4. #include <QObject>
  5. class MySingleton : public QObject
  6. {
  7.     Q_OBJECT
  8. public:
  9.     // 获取单例实例的静态方法
  10.     static MySingleton& instance()
  11.     {
  12.         static MySingleton instance;
  13.         return instance;
  14.     }
  15.     // 禁止拷贝构造和赋值
  16.     MySingleton(const MySingleton&) = delete;
  17.     MySingleton& operator=(const MySingleton&) = delete;
  18. signals:
  19.     // 可以定义一些信号
  20. public slots:
  21.     // 可以定义一些槽函数
  22. private:
  23.     // 私有构造函数和析构函数
  24.     MySingleton() {}
  25.     ~MySingleton() {}
  26. };
  27. #endif // MYSINGLETON_H
复制代码
2. 懒汉式单例模式

懒汉式单例模式在第一次调用 instance() 时才初始化单例对象。
  1. // MySingleton.h
  2. #ifndef MYSINGLETON_H
  3. #define MYSINGLETON_H
  4. #include <QObject>
  5. #include <QMutex>
  6. #include <QScopedPointer>
  7. class MySingleton : public QObject
  8. {
  9.     Q_OBJECT
  10. public:
  11.     // 获取单例实例的静态方法
  12.     static MySingleton& instance()
  13.     {
  14.         static QMutex mutex;
  15.         if (!m_instance)
  16.         {
  17.             QMutexLocker locker(&mutex);
  18.             if (!m_instance)
  19.             {
  20.                 m_instance.reset(new MySingleton());
  21.             }
  22.         }
  23.         return *m_instance;
  24.     }
  25.     // 禁止拷贝构造和赋值
  26.     MySingleton(const MySingleton&) = delete;
  27.     MySingleton& operator=(const MySingleton&) = delete;
  28. signals:
  29.     // 可以定义一些信号
  30. public slots:
  31.     // 可以定义一些槽函数
  32. private:
  33.     // 私有构造函数和析构函数
  34.     MySingleton() {}
  35.     ~MySingleton() {}
  36.     static QScopedPointer<MySingleton> m_instance;
  37. };
  38. #endif // MYSINGLETON_H
复制代码
  1. // MySingleton.cpp
  2. #include "MySingleton.h"
  3. QScopedPointer<MySingleton> MySingleton::m_instance(nullptr);
复制代码
3. 使用示例

在任何地方使用单例:
  1. #include "MySingleton.h"
  2. // 获取单例实例
  3. MySingleton& singleton = MySingleton::instance();
复制代码
关键点总结:

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表