c++单例三种实现
来源:互联网 发布:软件项目实施心得体会 编辑:程序博客网 时间:2024/04/30 01:01
c++实现一:
#include <iostream>#include <cstdio>#include <pthread.h>#include <unistd.h>#include <cstdlib>class Singleton{public: static Singleton* getInstance();private:static Singleton* Instance;Singleton(){}Singleton(const Singleton&);Singleton& operator=(const Singleton&);};Singleton* Singleton::Instance = NULL;Singleton* Singleton::getInstance(){if(Instance == NULL){Instance = new Singleton();}return Instance;}int main(int argc, char *argv[]){ Singleton* instance_a = Singleton::getInstance();Singleton* instance_b = Singleton::getInstance();if(instance_a == instance_b)std::cout << "OK" << std::endl; return 0;}
第二种实现方式:
#include <iostream>#include <cstdio>#include <pthread.h>#include <unistd.h>#include <cstdlib>class Singleton{public:static Singleton* Instance;static Singleton* getInstance(){return Instance;}private:Singleton(){}Singleton(const Singleton&);Singleton& operator=(const Singleton&);};Singleton* Singleton::Instance = new Singleton();int main(int argc, char *argv[]){ Singleton* instance_a = Singleton::getInstance();Singleton* instance_b = Singleton::getInstance();if(instance_a == instance_b)std::cout << "OK" << std::endl; return 0;}
第三种实现方式:
#include <iostream>#include <cstdio>#include <pthread.h>#include <unistd.h>#include <cstdlib>class Singleton{public:Singleton(){}static Singleton* Instance; static void InitSingleton() { Instance = new Singleton();} static Singleton* getInstance();private:Singleton(const Singleton&);Singleton& operator=(const Singleton&);};static pthread_once_t once = PTHREAD_ONCE_INIT;Singleton* Singleton::Instance = NULL;Singleton* Singleton::getInstance(){pthread_once(&once, Singleton::InitSingleton);return Instance;}int main(int argc, char *argv[]){ Singleton* instance_a = Singleton::getInstance();Singleton* instance_b = Singleton::getInstance();if(instance_a == instance_b)std::cout << "OK" << std::endl; return 0;}pthread_once函数:
int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))
这个函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。
0 0
- C/C++: 实现加减乘除。
- C实现C(3)
- 排序算法实现(C/C++)
- [C/C++]汉诺塔的实现
- C/C++--strcpy函数实现
- C/C++--memcpy函数实现
- C/C++--memmove函数实现
- C/C++--strcpy函数实现
- C/C++--strlen函数实现
- C/C++--strcmp函数实现
- 【C/C++】String类实现
- c++/c实现线程池
- C udp实现c/s
- C实现C(二)
- 【库】c实现数组
- 【库】c实现字符串
- 【库】c实现数组
- 【库】c实现字符串
- Adaboost
- js继承有5种实现方式
- 与 DPI 相关的 API 和注册表设置
- iOS Push Notification注意事项
- 在SD卡上安装树莓派的操作系统 - Linux版
- c++单例三种实现
- $.extend()和$.fn.extend()详解
- win10 系统 chrome内核浏览器 微软雅黑字体难看的解决方法
- Java将一般信息输出到console,将错误信心输出到文件
- Android ProGuard 的作用、使用及bug分析
- java中i++与++i的探讨
- VS2008+opencv 应用程序无法正常启动(0xc000007b)。
- 数据结构基础(1) --Swap & Bubble-Sort & Select-Sort
- CommonUtil 获得mimetype类型等