C++单例的完美实现
来源:互联网 发布:东方财富dk指标源码 编辑:程序博客网 时间:2024/06/05 22:47
这应该是懒汉模式完美单例了:
- 怎么控制创建类的过程
- 怎么兼容多线程
- 怎么在合适时机自动析构
- 怎么自动初始化mutex和释放
- 禁止拷贝,复制拷贝和等号运算符
// test.17.10.6.单例模式.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"//#include <windows.h>#include <pthread.h>class CWMDL{private: CWMDL(){} static CWMDL* m_c ;//可以自动释放 // 禁止拷贝--复制构造函数和等号运算符声明为私有的,并且不提供实现。 CWMDL(const CWMDL& other); CWMDL& operator=(const CWMDL& other); public: static CWMDL* Create() { if (nullptr==m_c) { printf("似乎未创建\r\n"); pthread_mutex_lock(&mutex);//双判断多线程加速 if (nullptr==m_c) { printf("确定未创建\r\n"); m_c = new CWMDL(); } else { printf("其实创建了\r\n"); } pthread_mutex_unlock(&mutex); } else { printf("已经创建\r\n"); } return m_c; } class CGarbo // 它的唯一工作就是在析构函数中删除CSingleton的实例 { public: ~CGarbo() { pthread_mutex_destory(&mutex); if (CWMDL::m_c) delete CWMDL::m_c; } }; static CGarbo Garbo; // 定义一个静态成员,在程序结束时,系统会调用它的析构函数 static pthread_mutex_t mutex;};CWMDL* CWMDL::m_c = nullptr;pthread_mutex_t CWMDL::mutex = PTHREAD_MUTEX_INITIALIZER;//静态初始化unsigned int __stdcall WorkThread(void*){ CWMDL* p = CWMDL::Create(); return 0;}int _tmain(int argc, _TCHAR* argv[]){ //CRITICAL_SECTION x = [](){CRITICAL_SECTION cs_tmp;InitializeCriticalSection(&cs_tmp);return cs_tmp;}; /* 因为是单类,只有一个类指针 我认为 主动释放类的话(即调用delete),多线程 可能多次调用,所以我们要让它自动释放 实验之。 */ const static int hdNumber = 20; HANDLE hd[hdNumber] = {0}; for (int i =0;i<hdNumber;++i) { _beginthreadex(NULL,0,WorkThread,0,NULL,0); } WaitForMultipleObjects(hdNumber,hd,TRUE,-1); Sleep(-1); return 0;}
以下是饿汉实现,来自http://www.cnblogs.com/qiaoconglovelife/p/5851163.html
class singleton{protected: singleton() {}private: static singleton* p;public: static singleton* initance();};singleton* singleton::p = new singleton;singleton* singleton::initance(){ return p;}
阅读全文
0 0
- C++单例的完美实现
- 完美的单例模式
- 完美的单例模式
- c++完美实现单例模式
- 【Objective-C】单例模式的实现
- Objective-C 单例模式的实现
- C 语言单例的一种实现
- c++--Singleton单例模式的实现
- 目前认为最完美的单例
- java 完美的单例模式
- java单例模式详解完美实现(包括反射破坏的防止和线程安全)
- c实现字符串的完美度
- 完美单例
- 单例Singleton完美版本实现:double-check
- c++11 单例模式可变参数实现完美转发
- Objective-C单例实现
- Objective C 单例实现
- 【C++】单例模式的一种简单实现的模板
- C++ 信号处理
- Web前端性能优化——如何提高页面加载速度
- QIODevice::write: device not open
- 10.6 test solution.
- 深入浅出,java垃圾回收机制
- C++单例的完美实现
- 标签二值化LabelBinarizer
- Java基础:持有对象
- Matlab 快速入门
- hashSet保证不重复的原理
- construct2 —简单制作游戏的好帮手
- 2.2OpenCV格式化输出矩阵
- 粒子滤波的原理和MATLAB实现
- java文件复制