C++中单例模式Demo
.h文件如下:
class DrawToolPrivate;
class DrawTool
{
public:
static DrawTool *getInstance();
static void deleteInstance();
~DrawTool();
private:
DrawTool();
DrawToolPrivate *const d_ptr;
};
.cpp文件如下:
#include "DrawTool.h"
#include <QMutex>
class DrawToolPrivate
{
public:
DrawToolPrivate() {}
~DrawToolPrivate() {}
static QMutex mutex;
};
QMutex DrawToolPrivate::mutex;
DrawTool *DrawTool::getInstance()
{
QMutexLocker locker(&DrawToolPrivate::mutex);
static DrawTool *instance = NULL;
if (instance == NULL)
{
instance = new DrawTool;
atexit(deleteInstance);
}
return instance;
}
void DrawTool::deleteInstance()
{
QMutexLocker locker(&DrawToolPrivate::mutex);
DrawTool *instance = getInstance();
if (instance)
{
delete instance;
instance = NULL;
}
}