您现在的位置是:主页 > news > 韶关营销网站开发联系方式/seo网络营销外包公司

韶关营销网站开发联系方式/seo网络营销外包公司

admin2025/6/7 3:14:49news

简介韶关营销网站开发联系方式,seo网络营销外包公司,家具设计师要学哪些软件,网站登录页面这几天研究起来单例模式,这对日常工程来说还是比较常见,例如配置文件等就需要用单例模式来声明。 由于厌烦的单例模式代码反复的重写,这几天想了不少的方法。而目前,只想到一种方法,就是用宏来做对应的声明。 我采用的…

韶关营销网站开发联系方式,seo网络营销外包公司,家具设计师要学哪些软件,网站登录页面这几天研究起来单例模式,这对日常工程来说还是比较常见,例如配置文件等就需要用单例模式来声明。 由于厌烦的单例模式代码反复的重写,这几天想了不少的方法。而目前,只想到一种方法,就是用宏来做对应的声明。 我采用的…

这几天研究起来单例模式,这对日常工程来说还是比较常见,例如配置文件等就需要用单例模式来声明。

由于厌烦的单例模式代码反复的重写,这几天想了不少的方法。而目前,只想到一种方法,就是用宏来做对应的声明。

 

我采用的单例模式是利用私有化构造函数来实现的,这个方法是最简单也是最基本的,多线程下是否可用有待考究。

 1 #define INITIALIZE_SINGLETON_CLASS(ClassName)\
 2     ClassName*ClassName::m_this = NULL;
 3 
 4 #define OBTAIN_SINGLETON_CLASS(ClassName)\
 5     ClassName::obtain##ClassName();
 6 
 7 #define RELEASE_SINGLETON_CLASS(ClassName)\
 8     ClassName::release##ClassName();
 9 
10 #define ANNOUNCEMENT_SINGLETON_CLASS(ClassName)\
11 private:\
12     static ClassName* m_this;\
13 private:\
14     ClassName(){};\
15     ~ClassName(){};\
16 public:\
17     static ClassName& obtain##ClassName()\
18     {\
19         if(!m_this) m_this = new ClassName();\
20         return (*m_this);\
21     }\
22     static void release##ClassName()\
23     {\
24         if(m_this) delete m_this;\
25         m_this = NULL;\
26     }\
27 public:
28 
29 #define ObtainSingletonClass(ClassName) OBTAIN_SINGLETON_CLASS(ClassName)
30 #define ReleaseSingletonClass(ClassName) RELEASE_SINGLETON_CLASS(ClassName)

 

这组宏中,声明了一个ANNOUNCEMENT_SINGLETON_CLASS宏,用在类的声明中;INITIALIZE_SINGLETON_CLASS宏,用于初始化全局唯一静态变量;

另外的两个宏OBTAIN_SINGLETON_CLASSRELEASE_SINGLETON_CLASS则是用于获取和释放该类的全局唯一对象。

使用的时候很简单,比如声明一个配置管理类:

1.在类.h文件中添加声明ANNOUNCEMENT_SINGLETON_CLASS宏,

1 // SystemConfig.h
3 class SystemConfig
4 {
5     ANNOUNCEMENT_SINGLETON_CLASS(SystemConfig);
6 };

2.在.cpp文件中添加初始化INITIALIZE_SINGLETON_CLASS宏,

1 // SystemConfig.cpp
3 INITIALIZE_SINGLETON_CLASS(SystemConfig);

这样就可以了。

 

具体使用的时候:

可以通过函数:obtian##ClassName来获取全局唯一实例对象,通过release##ClassName来释放全局唯一对象;或者利用两组宏OBTAIN_SINGLETON_CLASSRELEASE_SINGLETON_CLASS

当然,为了编码规范,我还另外将这两个宏专门声明成骆驼表示法的函数形式,让代码看起来更整洁。

转载于:https://www.cnblogs.com/BlueWinters/p/3587941.html