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