示例:
#ifndef TEST_H
#define TEST_H
class test
{
public:
static test * GetINSTANCE();
void print();
private:
test();
};
#endif // TEST_H
#include "test.h"
#include <QMutex>
#include <QDebug>
test::test()
{
}
test *test::GetINSTANCE()
{
static test * inst = nullptr;
static QMutex mutex;
mutex.lock();
if(!inst)
{
inst = new test;
}
mutex.unlock();
return inst;
}
void test::print()
{
static int m = 0;
m++;
qDebug()<<__FILE__<<"["<<__LINE__<<"]"<< m;
}
test::GetINSTANCE()->print();
test::GetINSTANCE()->print();
test::GetINSTANCE()->print();
使用类模板进行简单的优化,使代码扩展性更好一些:
#ifndef TEST_H
#define TEST_H
#include <QMutex>
template<typename T>
class Singleton
{
public:
static T * GetINSTANCE()
{
static T * inst = nullptr;
static QMutex mutex;
mutex.lock();
if(!inst)
{
inst = new T();
}
mutex.unlock();
return inst;
}
protected:
Singleton() = default;
};
class test:public Singleton<test>
{
friend class Singleton<test>;
public:
void print();
private:
test() = default;
};
#endif // TEST_H
#include "test.h"
#include <QDebug>
void test::print()
{
static int m = 0;
m++;
qDebug()<<__FILE__<<"["<<__LINE__<<"]"<< m;
}
test::GetINSTANCE()->print();
test::GetINSTANCE()->print();
test::GetINSTANCE()->print();