用宏实现的单例模式(转)

u011022940 2014-03-15 09:33:12

个人感觉使用比较方便
#define SINGLETON_CLASS_NO_DEF_CONSTRUCT_BODY(class_name)\
private:\
class_name();\
class_name(const class_name&);\
class_name & operator = (const class_name &);\
public:\
static class_name & Instance()\
{\
static class_name one;\
return one;\
}

#define SINGLETON_CLASS(class_name)\
private:\
class_name(){}\
class_name(const class_name&);\
class_name & operator = (const class_name &);\
public:\
static class_name & Instance()\
{\
static class_name one;\
return one;\
}


两个宏的区别仅在于是否实现 默认的无参构造函数。使用例子:
// HostBasicInformation.h
class HostBasicInformation
{
SINGLETON_CLASS_NO_DEF_CONSTRUCT_BODY(HostBasicInformation)

public:
virtual ~HostBasicInformation();

std::string GetInstallCode();

};

// HostBasicInformation.cpp

// 若使用SINGLETON_CLASS ,则不需要自己定义无参构造函数
HostBasicInformation::HostBasicInformation(){

}



HostBasicInformation::~HostBasicInformation(){

}

std::string HostBasicInformation::GetInstallCode()
{
return "";
}


这种宏的方式,主要优点在于:能严格限制此类的使用方式,也就是只能当做单例来使用。
std::string str_installCode = HostBasicInformation::Instance().GetInstallCode();

...全文
4065 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
这不是鸭头 2014-03-27
  • 打赏
  • 举报
回复

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧