单列宏第二版Demo

LiuYinChina 2006-01-07 03:25:05
#include <iostream.h>

/*
*
* Copyright (c) 2006
* Author: RobertBaker
* DECLARE_SINGLETON Ver 2.0
*/

#define DECLARE_SINGLETON(CLASSNAME) \
public: \
static CLASSNAME * const & GetSingleton(bool bCreate = true) { \
static CLASSNAME *s_pSingleton = 0; \
static Close##CLASSNAME close##CLASSNAME; \
\
if (s_pSingleton == 0 && bCreate) { \
s_pSingleton = new CLASSNAME; \
} \
\
return s_pSingleton; \
} \
\
static bool IsCreatedSingleton() { return GetSingleton(false) != 0; } \
static void CloseSingleton() { \
CLASSNAME *&p##CLASSNAME = const_cast<CLASSNAME *&>(GetSingleton()); \
\
if (p##CLASSNAME != 0) { \
delete p##CLASSNAME; \
p##CLASSNAME = 0; \
} \
} \
private: \
struct Close##CLASSNAME { \
Close##CLASSNAME() {} \
~Close##CLASSNAME() { CloseSingleton(); } \
}; \

class A
{
DECLARE_SINGLETON(A)
protected:
A() {}
~A() {}
};

int main()
{
cout << A::IsCreatedSingleton() << endl;
A *pA = A::GetSingleton();
cout << A::IsCreatedSingleton() << endl;
return 0;
}
...全文
187 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cunsh 2006-01-07
  • 打赏
  • 举报
回复
xuexi;

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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