C++单例模式设计与实现
2016-07-25 16:39
651 查看
C++单例模式主要用途就是整个程序中只实例化一个对象,之后获取到的都是该对象本身进行处理问题。
单例模式一般都是在函数中采用局部静态变量完成的,因为局部的静态变量生命周期是随着程序的生命周期
一起结束,所以不用担心会失效。另外局部的静态变量作用域仅限于该函数内部,别的函数不会直接使用。
第三点就是局部的静态变量跟所有的静态变量一样,放在全局区(静态区),只被初始化一次。
下面是我结合模板设计的单例类
其余的类继承就可以了。
需要注意类的静态成员变量,如果不是integer type,需要在类外完成初始化。
int属于integer type,在类内可以完成初始化。
其余的类继承该类:
使用时使用getsinggleton这个函数即可。
这是我服务器中截取的代码,可以从github中下载该服务器源码。
下载地址:https://github.com/secondtonone1/smartserver
服务器自己做的,还在不断地完善之中。
我的微信公众号平台:
单例模式一般都是在函数中采用局部静态变量完成的,因为局部的静态变量生命周期是随着程序的生命周期
一起结束,所以不用担心会失效。另外局部的静态变量作用域仅限于该函数内部,别的函数不会直接使用。
第三点就是局部的静态变量跟所有的静态变量一样,放在全局区(静态区),只被初始化一次。
下面是我结合模板设计的单例类
#ifndef _SINGLETON_CLASS_H_ #define _SINGLETON_CLASS_H_ template <class Type> class Singleton { protected : Singleton(){} public: static Type & getSingleton() { return singleton; } private: Singleton(const Singleton & temp){ singleton = temp.singleton; } private: static Type singleton; }; template <class Type> Type Singleton<Type>::singleton; #endif
其余的类继承就可以了。
需要注意类的静态成员变量,如果不是integer type,需要在类外完成初始化。
int属于integer type,在类内可以完成初始化。
其余的类继承该类:
class NetWorkSystem : public Singleton<NetWorkSystem> { public: NetWorkSystem():m_nListenfd(0),m_pEvent_base(NULL),m_nConnId(0){} bool initial(); static void tcpread_cb(struct bufferevent *bev, void *ctx); static void tcpwrite_cb(struct bufferevent *bev, void *ctx); static void tcperror_cb(struct bufferevent *bev, short what, void *ctx); static void listener_read_cb(evutil_socket_t fd, short what, void *p); void run(); void release(); //... };
使用时使用getsinggleton这个函数即可。
这是我服务器中截取的代码,可以从github中下载该服务器源码。
下载地址:https://github.com/secondtonone1/smartserver
服务器自己做的,还在不断地完善之中。
我的微信公众号平台:
相关文章推荐
- C++ QQ游戏 连连看外挂 内存挂入门
- c++ smart pointer
- poj1322Chocolate(724训练题)解析
- C++11 —— 基于区间(range)的 for 循环
- C++封装POSIX 线程库(一)互斥锁的封装
- C#学习笔记 对比C++
- 【C++】类 与继承
- 【C/C++】关键字之sizeof(sizeof()用法汇总)
- RAII惯用法:C++资源管理的利器
- C++ PDFLib 8.0 中文输出
- 1104. Sum of Number Segments (20)
- C++ Primer 第二章 引用 指针 const限定符
- C语言指针笔记
- C++/C语言函数:isalpha()函数 isdigit(int c)宏
- 大话设计模式19----组合模式
- C++——queue
- c++ 输出参数
- 2016003 VS2008MFC扩展动态库与调用示例
- c语言描述的顺序表实现
- C++的一些不错开源框架,可以学习和借鉴