栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 单例模式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 单例模式

单例模式的声明

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号