设计模式——单例模式(C++实现)
2016-07-21 13:06
357 查看
懒汉模式
懒汉模式是在类第一次被引用时,才会将自己实例化,它面临着多线程访问的安全性问题。基本模式
class ClassName { private: ClassName() { } virtual ~ClassName() { } static ClassName *singleton_; public: static ClassName *GetInstance() { if (singleton_ == NULL) { singleton_ = new ClassName(); } return singleton_; } static void ReleaseInstance() { if (singleton_ != NULL) { delete singleton_; singleton_ = NULL; } } }; ClassName *ClassName::singleton_ = NULL;
线程安全
class ClassName { private: ClassName() { } virtual ~ClassName() { } static ClassName *singleton_; public: static ClassName *GetInstance() { lock { if (singleton_ == NULL) { singleton_ = new ClassName(); } } return singleton_; } static void ReleaseInstance() { lock { if (singleton_ != NULL) { delete singleton_; singleton_ = NULL; } } } }; ClassName *ClassName::singleton_ = NULL;
双重锁定
class ClassName { private: ClassName() { } virtual ~ClassName() { } static ClassName *singleton_; public: static ClassName *GetInstance() { if (singleton_ == NULL)//若实例未创建,则加锁 { lock { if (singleton_ == NULL)//第二次检查 { singleton_ = new ClassName(); } } } return singleton_; } static void ReleaseInstance() { if (singleton_ != NULL) { lock { if (singleton_ != NULL)//第二次检查 { delete singleton_; singleton_ = NULL; } } } } }; ClassName *ClassName::singleton_ = NULL;
饿汉模式
饿汉模式是静态初始化的方式,它在自己被加载时就将自己实例化,需要提前占用系统资源,但不存在线程安全问题。class ClassName { private: ClassName() { } virtual ~ClassName() { } static ClassName *singleton_; public: static ClassName *GetInstance() { return singleton_; } static void ReleaseInstance() { if (singleton_ != NULL) { delete singleton_; singleton_ = NULL; } } }; ClassName *ClassName::singleton_ = new ClassName();
相关文章推荐
- C语言实现简单的守护进程及信号处理
- c++函数模板
- C++连接mysql的两种方式(ADO连接和mysql api连接)
- C++STL之string
- C++STL之string
- 《C++并发编程实战》读书笔记(1)
- 大话设计模式06----装饰模式
- Const 在C C++里有什么不同
- C++里读取一行字符串
- CMakeLists 的使用,大型工程使用cmake 的构件过程
- gdal - ogr简单对象模型
- C语言:指针及其运算
- 大数 乘法 C语言
- C++最小函数模板demo
- Windows与USB的通信
- C++ 中的sprintf和snprintf 函数的区别
- 离散余弦函数(c++实现)
- C++ string类的简单实现
- C语言scanf函数用法详细解释!!!
- c++学习笔记(二):数据类型