这样可行是因为以下几点:

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相关推荐

  1. 【Spring】bean的作用域(@Scope) - singleton、prototype

    已知spring 3+已拥有多种不同的作用域: singleton(默认).prototype.request.session.global session.(参考: spring中scope作用域( ...

  2. 使用Singleton需要考虑内存释放

    GoF[p84]所说的Singleton没有考虑到内存的释放 解决方法: 1.加入一个成员函数DestroyInstance()来释放内存,在整个工程中需且仅需调用DestroyInstance()一 ...

  3. 用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 ...

  4. Singleton 单例模板

    1 // singleton.h 2 3 #ifndef SINGLETON_H 4 #define SINGLETON_H 5 6 // 单例基类模板 7 template <class T& ...

  5. php singleton()

    common.php <?php class CC { private static $ins; public static function singleton() { if (!isset( ...

  6. 设计模式之单例模式(Singleton)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  7. Ruby的Singleton method

    Ruby中,特定于某一对象的方法被称为Singleton method. 例如: a = "string"def a.runputs "#{self} run" ...

  8. swift (Singleton)模式

    一不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法.单例的实现有多种方法,如下面: ? 1 2 3 4 5 6 7 8 9 10 11 12 class Swift ...

  9. singleton设计模式_让我们研究一下Singleton设计模式的优缺点

    singleton设计模式 by Navdeep Singh 通过Navdeep Singh 让我们研究一下Singleton设计模式的优缺点 (Let's examine the pros and ...

最新文章

  1. fcitx输入法在wps、wineqq中失灵问题的解决
  2. linux 上使用wc -l命令快速查看文件内容有多少行,以及如何匹配指定字符查看多少行
  3. 神经网络与深度学习——TensorFlow2.0实战(笔记)(三)(python输入和输出)
  4. php新闻删除功能设计,php原生开发新闻站之删除新闻
  5. html语言标示,HTML语言剖析(二) HTML标记一览
  6. java 绘图 渐变_在CAShapeLayer图形下方绘制渐变
  7. STM32F207 HOST读写u盘枚举失败 USBH_BUSY 或 操作U盘 打开其根目录f_opendir一直卡死
  8. 利用最大流最小割算法matlab割图
  9. GY-BMP280-3.3 高精度大气压强传感器模块
  10. Java Web实训-西蒙购物网
  11. 人人商场二次开发-克隆我的小店页面导航 首页 清除
  12. android局域网打印机共享文件夹,如何设置电脑使安卓手机能访问局域网共享的文件...
  13. 怎么给固定资产安装标签
  14. stm32cubemx hal学习记录:JY901S串口
  15. 漫画研发之九:浑水好摸鱼
  16. C程序--输出月份英文名(指针数组)
  17. 【风控系列】3. 高效的风控业务流程
  18. border-radius详解分享
  19. ArcGIS基于爬虫数据绘制人口分布密度图
  20. Jquary全屏滚动插件fullpage.js的使用

热门文章

  1. 并发新特性—Executor 框架与线程池
  2. Python拼接多张图片
  3. 第六章 深度学习(中下)
  4. 线性规划、梯度下降、正规方程组——斯坦福ML公开课笔记1-2
  5. 程序员面试题精选100题(32)-不能被继承的类[C/C++/C#]
  6. 快速入门:十分钟学会Python
  7. 大话设计模式(三 复制VS复用)
  8. 观点 | 云原生时代来袭 下一代云数据库技术将走向何方?
  9. 你真的理解JS的继承了吗?
  10. spring注入出错