Singleton模式Linux下的C++实现
2012-02-22 20:54
411 查看
Singleton模式是最常用的设计之一,最近结合自己的实际应用,把Singleton作为模板抽象出来(线程安全),权当抛砖引用,欢迎大家提出批评意见,互相交流。下面为源码,已经编译运行过。
Singleton 模板类
验证程序
Singleton 模板类
#ifndef _Singleton_h_ #define _Singleton_h_ #include <pthread.h> class Mutex { public: Mutex() { pthread_mutex_init(&m_lock,NULL); } ~Mutex() { pthread_mutex_destroy(&m_lock); } void Lock() { pthread_mutex_lock(&m_lock); } void UnLock() { pthread_mutex_unlock(&m_lock); } private: pthread_mutex_t m_lock; }; template<class T> class Singleton { public: static T* GetInstance(); static void Destroy(); private: static T* m_pInstance; static Mutex m_mutex; }; template<class T> T* Singleton<T>::m_pInstance = 0; template<class T> Mutex Singleton<T>::m_mutex; template<class T> T* Singleton<T>::GetInstance() { if (m_pInstance) { return m_pInstance; } m_mutex.Lock(); if (NULL == m_pInstance) { m_pInstance = new T; } m_mutex.UnLock(); return m_pInstance; } template<class T> void Singleton<T>::Destroy() { if (m_pInstance) { delete m_pInstance; m_pInstance= NULL; } } #endif
验证程序
#include "Singleton.h" #include <iostream> using namespace std; class Testclass { public: void Run () { cout<<"Hi, Testclass run.\n"; } private: friend class Singleton<Testclass>; Testclass() {}; ~Testclass() {}; Testclass(const Testclass& ref); Testclass& operator=(const Testclass& ref); }; typedef Singleton<Testclass> SingleTestclass; int main() { Testclass* pInstance = SingleTestclass::GetInstance(); pInstance->Run(); return 0; }
相关文章推荐
- Singleton模式Linux下的C++实现
- Linux平台上用C++实现多线程互斥锁
- Linux c++ 线程池及其实现
- 多线程实现文件拷贝(Linux下C++)
- 同步事件,信号量,互斥,临界区,线程,线程池C++实现(win32,linux)
- linux下c/c++实例之十四c实现的bt软件下载
- 外排序的实现(平台Linux & 语言C++)
- linux下使用jni实现c++调用java程序(4)DestroyJavaVM出现错误
- linux下php实现C/C++扩展编程
- linux下使用SWIG实现Python调用C++ sdk读取相机图片
- C++完美实现Singleton模式zz
- pc-lint静态代码分析工具(检查linux下C++代码的实现方式)
- linux下实现g++编译链接c++源文件和头文件
- Linux平台上用C++实现多线程互斥锁
- linux下C++ 插件(plugin)实现技术
- Linux下C++实现PHP扩展中级应用(一)
- linux下用C/C++和socket实现的驾校约车助手
- 【转】Linux平台上用C++实现多线程互斥锁
- windows 与linux 下用C++读取sqlite实现文件复制(一)
- C++实现Linux下弹出U盘的方法