我常用的 C++ 单例模式
2016-07-24 18:01
295 查看
工作中经常要用到单例模式,下面写一个i额自己常用的 c++ 单例模式。
首先,我们需要设计原则。设计模式经典GoF定义的单例模式需要满足以下两个条件:
保证一个类只创建一个实例。
提供对该实例的全局访问点。
Scott Meyers在《Effective C++》(Item 04)中的提出一种更优雅的单例模式实现,使用local static对象(函数内的static对象)。当第一次访问Instance()方法时才创建实例,符合条件一。静态函数
程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。这样开发人员就不用去担心对象的销毁问题。
如果你不想申明拷贝构造函数和赋值函数,可以让静态函数返回该实例的指针而不是引用,如下:
http://www.zkt.name/dan-li-mo-shi-singleton-ji-c-shi-xian/ 这个连接给出了四种经典的单例模式的实现,非常值得一读。
http://blog.csdn.net/hackbuteer1/article/details/7460019 这个连接讲解了各种实现之间的优缺点,同样非常值得一读。
首先,我们需要设计原则。设计模式经典GoF定义的单例模式需要满足以下两个条件:
保证一个类只创建一个实例。
提供对该实例的全局访问点。
Scott Meyers在《Effective C++》(Item 04)中的提出一种更优雅的单例模式实现,使用local static对象(函数内的static对象)。当第一次访问Instance()方法时才创建实例,符合条件一。静态函数
Instance()提供了该实例的全局访问点,符合条件二。
程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。这样开发人员就不用去担心对象的销毁问题。
class Singleton { public: static Singleton& Instance() { static Singleton instance; return instance; } private: Singleton(); ~Singleton(); Singleton(const Singleton&); Singleton& operator=(const Singleton&); };
如果你不想申明拷贝构造函数和赋值函数,可以让静态函数返回该实例的指针而不是引用,如下:
class Singleton { public: static Singleton * Instance() { static Singleton instance; return &instance; } private: Singleton(); ~Singleton(); };
http://www.zkt.name/dan-li-mo-shi-singleton-ji-c-shi-xian/ 这个连接给出了四种经典的单例模式的实现,非常值得一读。
http://blog.csdn.net/hackbuteer1/article/details/7460019 这个连接讲解了各种实现之间的优缺点,同样非常值得一读。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- PropertyChangeListener简单理解
- 关于指针的一些事情
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本