C++单例基类模板
来源:互联网 发布:松江 量化 java 招聘 编辑:程序博客网 时间:2024/06/06 15:01
开发中,经常会用到单例。特别是单例设计模式中,会出现很多单例,每个单例都有很多类似的地方,感觉一直在重复造轮子,所以希望可以改进。
其中原理主要是对c++继承规则的理解,以及 模板/友元 的一些基础知识,另外也在网上搜了一些其他的单例基类,但是都不够完善,所以自己综合了一下。
从每一步的注释,到自动析构防止内存泄漏,再到禁止拷贝赋值构造等等,代码里都有了,个人认为下面这个单例模板算是比较完善的一个了。
单例基类模板Singleton.h
template <class T>class Singleton{ private: static T* m_pInstance; //禁止拷贝构造和赋值运算符. The only way is getInstance() Singleton(const Singleton& src){} Singleton &operator=(const Singleton& src){}; class Garbo //它的唯一工作就是在析构函数中析构Singleton的实例,所以private { public: ~Garbo() { if (Singleton::m_pInstance) { delete Singleton::m_pInstance; Singleton::m_pInstance = NULL; } } }; static Garbo garbo; //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数,我们不需要访问这个变量,所以不需要初始化 protected: //使继承者无法public构造函数和析构函数 Singleton(){} ~Singleton(){}public: static T* getInstance() { if (m_pInstance == NULL) //判断是否第一次调用 m_pInstance = new T(); return m_pInstance; }};template <class T>T* Singleton<T>::m_pInstance = NULL; //必须初始化这个静态成员,初始化的过程中会分配内存,否则无法访问
使用方式是继承该类,并声明其基类为友元,以及将该类的构造函数声明为私有就行了
例子 A.h
class A : public Singleton<A>{ friend class Singleton<A>; //因为基类在getInstance()中 new T() 时会调用到A的构造函数public: void function();private: A();};
这个例子中,class A就是一个单例,比如调用A的方法时,就可以 A::getInstance()->function()
0 0
- C++-模板
- C++-模板
- C++:模板
- C++:模板
- C++:模板
- 模板 (C++)
- C ++ 模板
- C ++ 模板
- 【C++】模板
- c++----------模板
- C++--------------------------------------------模板
- c++--模板
- C++:模板
- 【基础C&C++】模板
- 【c/c++】类模板
- 【C/C++】模板类
- 【c++】模板和模板类
- C/C++:函数模板与类模板
- php事务回滚
- CRC32与md5
- 破解DEDECMS的后台密码方法
- 搭建lamp环境
- mysql的默认字符编码的设置
- C++单例基类模板
- Redis 学习笔记十 发布者订阅者模式与生产者消费者模式
- spring-boot集成swagger(接口管理工具)
- 110. Balanced Binary Tree
- Aerospike数据库实战(四) -- Aerospike 安装部署
- xcode8.2 cocoapods install第三方库 遇到Abort trap :6 的问题 的解决办法
- 几个简单的导航布局
- 第三章SQL编程--经典案例和上级题
- 项目制作随感