用QMutexLocker、QScopedPointer、模板、Q_DISABLE_COPY_MOVE、宏定义写一个QT单例通用类
时间: 2023-12-23 13:06:33 浏览: 154
好的,以下是使用 QMutexLocker、QScopedPointer、模板、Q_DISABLE_COPY_MOVE、宏定义写一个通用的 Qt 单例类的示例代码:
```cpp
#include <QMutexLocker>
#include <QScopedPointer>
#define DECLARE_SINGLETON(Class) \
public: \
static Class& instance() \
{ \
static QScopedPointer<Class> s_instance(new Class); \
static QMutex mutex; \
QMutexLocker locker(&mutex); \
if (!s_instance) { \
s_instance.reset(new Class); \
} \
return *s_instance; \
} \
Q_DISABLE_COPY_MOVE(Class) \
private: \
Class() {} \
~Class() {}
template<typename T>
class Singleton
{
public:
static T& instance()
{
return T::instance();
}
};
```
使用方法与上一个示例代码相同:
```cpp
class MyClass : public Singleton<MyClass>
{
DECLARE_SINGLETON(MyClass)
public:
void foo() { /* ... */ }
};
// 使用单例
MyClass::instance().foo();
```
这样就可以定义一个更加完善的通用的 Qt 单例类了。其中,使用了 QMutexLocker 和 QScopedPointer 来保证线程安全和内存管理,同时禁止了拷贝和移动构造函数。在使用时,只需要继承自 `Singleton` 并使用 `DECLARE_SINGLETON` 宏定义即可。
阅读全文