单例模式以及单例模式与静态类的对比
来源:互联网 发布:微课视频剪辑软件 编辑:程序博客网 时间:2024/06/14 19:29
参考文章:http://developer.51cto.com/art/201002/183454.hthttp://tongling.blog.51cto.com/3925599/1247930
C++单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等
单例模式的作用,全局变量、静态类几乎都可以实现,但相对来说显得并不是那么优雅。定义一个单例类,类里面有一个是私有的静态的类指针指向类的唯一实例,还有一个public方法获取指向唯一实例的指针,如下:
class CSingleton: { // 其它成员 public: static CSingleton * GetInstance() { if (m_pInstance == NULL) m_pInstance = new CSingleton(); return m_pInstance; } private: CSingleton(){}; static CSingleton * m_pInstance; }此时,对于m_pInstance指向的内存存在哪?什么时候释放?对于内存m_pInstance内存的释放,我们可以delete内存即可,但是这样显得太过粗鲁,而且容易出错。此时肯定肯定有一个妥善的方法是让这个类自己知道在合适的时候把自己删除。或者说把删除自己的操作挂在系统中的某个合适的点上,使其在恰当的时候自动被执行。我们知道,程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我们可以在单例类中定义一个这样的静态成员变量,而它的唯一工作就是在析构函数中删除单例类的实例。如下面的代码中的CGarbo类(Garbo意为垃圾)
class CSingleton: { // 其它成员 public: static CSingleton * GetInstance() private: CSingleton(){}; static CSingleton * m_pInstance; class CGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例 { public: ~CGarbo() { if (CSingleton::m_pInstance) delete CSingleton::m_pInstance; } }; static CGarbo Garbo; // 定义一个静态成员,在程序结束时,系统会调用它的析构函数 }
0 0
- 单例模式以及单例模式与静态类的对比
- Java, C++ 单例模式与静态成员初始化对比
- 单例模式与静态方法
- 【C++】静态成员与单例模式
- C++单例模式对比
- 静态方法与单例模式的区别
- 单例模式与静态方法的比较
- 单例模式与静态变量的区别
- 单例模式与静态变量的区别
- 单例模式与静态变量的区别
- 静态方法与单例模式的区别
- 静态方法与单例模式的区别
- 静态方法与单例模式的区别
- 单例模式之懒汉模式与饿汉模式的对比
- java中的单例模式与静态类
- 静态属性 单例模式
- 单例设计模式与静态类,静态方法的联系
- 静态类和单例模式区别
- gdb调试
- spring mvc+mybatis+mysql项目
- Java并发编程之线程管理(Executor框架15)
- hdu1004
- 从零开始学习cpld(1)
- 单例模式以及单例模式与静态类的对比
- 三门问题
- 算法导论学习之归并排序
- OSX: Garageband/LogicPro各种安装包下载
- python----异常、属性
- 基础加强-IntroSpector(内省)
- PHP自学过程之 运算符与流程控制
- 表单练习题
- 64位系统深入剖析:不仅是内存这么简单