在 C++ 中,使用 Qt 框架实现单例模式可以确保一个类只有一个实例,并提供一个全局访问点。以下是一个简朴的 C++ Qt 单例模式实现示例。
1. 饿汉式单例模式
饿汉式单例模式在类加载时就初始化单例对象。
- // MySingleton.h
- #ifndef MYSINGLETON_H
- #define MYSINGLETON_H
- #include <QObject>
- class MySingleton : public QObject
- {
- Q_OBJECT
- public:
- // 获取单例实例的静态方法
- 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_OBJECT
- public:
- // 获取单例实例的静态方法
- 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 中实现单例模式,包括线程安全的懒汉式实现和直接初始化的饿汉式实现。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |