a singleton implemention
这样可行是因为以下几点:
1 内部类可以直接访问外部类的静态成员、typedef、枚举值
2 Cleanup对象可能在多线程环境下重复构造初始化, 但无关紧要
#ifndef _CRS_SINGLETON_H_ #define _CRS_SINGLETON_H_ template<class _Type> class Singleton{ public: static _Type *get_instance(); protected: friend class Cleanup; class Cleanup{ public: ~Cleanup(); }; static _Type *instance; static pthread_mutex_t lock; Singleton(){} ~Singleton(){}; }; template<class T> pthread_mutex_t Singleton<T>::lock = PTHREAD_MUTEX_INITIALIZER; template<class T> T *Singleton<T>::instance = NULL; template<class T> Singleton<T>::Cleanup::~Cleanup(){ pthread_mutex_lock(&lock); if(instance){ delete instance; instance = NULL; } pthread_mutex_unlock(&lock); } template<class T> T* Singleton<T>::get_instance(){ static Cleanup _Cleanup; if(!instance){ pthread_mutex_lock(&lock); if(!instance){ instance = new T(); } pthread_mutex_unlock(&lock); } return instance; } #endif /*_CRS_SINGLETON_H_*/
但是和这个实现比较起来, cleanup是不是显得有些多余??
class singleton { public: singleton& instance() { static singleton* refer; if(refer != 0) { guard_lock(mutex); //pseudo code if(refer == 0) { static singleton object; refer = &object; return object; } } return *refer; } };
a singleton implemention相关推荐
- 【Spring】bean的作用域(@Scope) - singleton、prototype
已知spring 3+已拥有多种不同的作用域: singleton(默认).prototype.request.session.global session.(参考: spring中scope作用域( ...
- 使用Singleton需要考虑内存释放
GoF[p84]所说的Singleton没有考虑到内存的释放 解决方法: 1.加入一个成员函数DestroyInstance()来释放内存,在整个工程中需且仅需调用DestroyInstance()一 ...
- 用java代码实现Singleton,为什么在Java代码中实现Singleton模式(有时被认为是Java世界中的反模式)?...
I have seen some people in SO commenting that Singleton Pattern is an anti-pattern. I want to know w ...
- Singleton 单例模板
1 // singleton.h 2 3 #ifndef SINGLETON_H 4 #define SINGLETON_H 5 6 // 单例基类模板 7 template <class T& ...
- php singleton()
common.php <?php class CC { private static $ins; public static function singleton() { if (!isset( ...
- 设计模式之单例模式(Singleton)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- Ruby的Singleton method
Ruby中,特定于某一对象的方法被称为Singleton method. 例如: a = "string"def a.runputs "#{self} run" ...
- swift (Singleton)模式
一不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法.单例的实现有多种方法,如下面: ? 1 2 3 4 5 6 7 8 9 10 11 12 class Swift ...
- singleton设计模式_让我们研究一下Singleton设计模式的优缺点
singleton设计模式 by Navdeep Singh 通过Navdeep Singh 让我们研究一下Singleton设计模式的优缺点 (Let's examine the pros and ...
最新文章
- fcitx输入法在wps、wineqq中失灵问题的解决
- linux 上使用wc -l命令快速查看文件内容有多少行,以及如何匹配指定字符查看多少行
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(python输入和输出)
- php新闻删除功能设计,php原生开发新闻站之删除新闻
- html语言标示,HTML语言剖析(二) HTML标记一览
- java 绘图 渐变_在CAShapeLayer图形下方绘制渐变
- STM32F207 HOST读写u盘枚举失败 USBH_BUSY 或 操作U盘 打开其根目录f_opendir一直卡死
- 利用最大流最小割算法matlab割图
- GY-BMP280-3.3 高精度大气压强传感器模块
- Java Web实训-西蒙购物网
- 人人商场二次开发-克隆我的小店页面导航 首页 清除
- android局域网打印机共享文件夹,如何设置电脑使安卓手机能访问局域网共享的文件...
- 怎么给固定资产安装标签
- stm32cubemx hal学习记录:JY901S串口
- 漫画研发之九:浑水好摸鱼
- C程序--输出月份英文名(指针数组)
- 【风控系列】3. 高效的风控业务流程
- border-radius详解分享
- ArcGIS基于爬虫数据绘制人口分布密度图
- Jquary全屏滚动插件fullpage.js的使用