单例模式的声明
头文件:Singletion.h
// 单例模式申明
#define PATTERN_SINGLETON_DECLARE(classname)\
public:\
static classname* Instance();\
static void Close();\
private:\
static classname* m_pSingletion;
// 单例模式实现
#define PATTERN_SINGLETON_IMPLEMENT(classname)\
classname* classname::m_pSingletion = NULL;\
classname* classname::Instance()\
{\
if (m_pSingletion == NULL)\
{\
m_pSingletion = new classname;\
}\
return m_pSingletion;\
}\
void classname::Close()\
{\
if (m_pSingletion != NULL)\
{\
delete m_pSingletion;\
m_pSingletion = NULL;\
}\
}
使用方法
头文件
假设类 sample需要使用单例模式,则在类sample的头文件中声明
#include "Singletion.h"
#define INST_SAMPLE sample::Instance()
class sample
{
PATTERN_SINGLETON_DECLARE(sample)
public:
sample();
~sample();
//具体的功能 随意
。。。。。。
}
这样写就相当于是:
#include "Singletion.h"
#define INST_SAMPLE sample::Instance()
class CDSPluginMainUI
{
public:
static sample* Instance();
static void Close();
private:
static sample* m_pSingletion;
public:
sample();
~sample();
}
就是多加了一个 私有成员指针,两个静态函数
.cpp
在实现的cpp中
#include "sample.h"
PATTERN_SINGLETON_IMPLEMENT(sample)
sample::sample()
{
}
相当于是
sample* sample::m_pSingletion = NULL;
sample* sample::Instance()
{
if (m_pSingletion == NULL)
{
m_pSingletion = new sample;
}
return m_pSingletion;
}
void sample::Close()
{
if (m_pSingletion != NULL)
{
delete m_pSingletion;
m_pSingletion = NULL;
}
}
完成之后 就可以使用函数Instance()
为了使用方便 我们在头文件中定义
#define INST_SAMPLE sample::Instance()
之后就可以用 INST_SAMPLE 调用这个类了