经常需要使用单例,这里写一个直接看代码
#define DECLARE_SINGLETON(Class) \
Q_DISABLE_COPY(Class) \
public: \
static Class* Instance() \
{ \
static QMutex mutex; \
static QScopedPointer<Class> inst; \
if (Q_UNLIKELY(!inst)) { \
mutex.lock(); \
if (!inst) inst.reset(new Class); \
mutex.unlock(); \
} \
return inst.data(); \
}
完整的代码有
myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QtCore>
#define DECLARE_SINGLETON(Class) \
Q_DISABLE_COPY(Class) \
public: \
static Class* Instance() \
{ \
static QMutex mutex; \
static QScopedPointer<Class> inst; \
if (Q_UNLIKELY(!inst)) { \
mutex.lock(); \
if (!inst) inst.reset(new Class); \
mutex.unlock(); \
} \
return inst.data(); \
}
class MyClass
{
DECLARE_SINGLETON(MyClass)
public:
MyClass();
public:
void printClass();
};
#endif // MYCLASS_H
myclass.cpp
#include "myclass.h"
#include <QDebug>
MyClass::MyClass()
{
}
void MyClass::printClass()
{
qDebug()<<"my point:"<<this;
}
main.cpp
#include <QCoreApplication>
#include "myclass.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyClass* c = MyClass::Instance();
c->printClass();
MyClass* b = MyClass::Instance();
b->printClass();
return a.exec();
}