c++单例三种实现
2015-10-14 10:56
295 查看
c++实现一:
第二种实现方式:
第三种实现方式:
int pthread_once(pthread_once_t *once_control, void (*init_routine) (void))
这个函数使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。
#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()函数在本进程执行序列中仅执行一次。
相关文章推荐
- 堆排序C++
- 雪*C语言核心知识总结二
- C++ 类成员函数后面加 const关键字
- C语言程序100例之C#版-029
- Cpp--C++中排序常用(菜鸟上路,持续更新)
- 程序员---C语言细节7(增加两个整数溢出检测)
- C语言基础
- Longest Substring Without Repeating Characters - Leetcode
- [c++] LeetCode Two Sum问题
- 第一、二课C语言基础课程学习心得
- c++ include 与 using namespace
- Eclipse下编写C++程序——CDT环境搭建
- access函数使用方法
- 01背包问题的动态规划算法
- hdoj 2044 一只小蜜蜂... C++
- 运算符重载
- poco c++框架:日期时间
- 黑马程序员——C语言学习笔记06 结构体
- hdoj 2042 不容易系列之二 C++
- c++ 常量成员函数