单例模式的声明

头文件: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 调用这个类了

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐