zoukankan      html  css  js  c++  java
  • 很好的设计-安全的单例模式

    在服务开发过程中,常常需要单例来保存全局资源,本文给出一个实用的实现方案。

    template<class T>
    class Singleton
    {
        public:
            static T* instance()
            {
                if (NULL == instance_)
                {
                    pthread_mutex_init(&mutex_, NULL);
                    pthread_mutex_lock(&mutex_);
                    if (NULL == instance_) {
                        instance_ = new T;
                    }
                    pthread_mutex_unlock(&mutex_);
                }   
                return instance_;
            }   
        protected:
            Singleton(){}
            virtual ~Singleton()
            {//虚析构函数,想想为啥呢?
                if (NULL != instance_)
                {
                    delete instance_;
                    instance_ = NULL;
                }
            }
            Singleton(const Singleton& single);//禁用拷贝和赋值函数
            Singleton& operator= (const Singleton& single);
    
    
        protected:
            static T* instance_;
            static pthread_mutex_t mutex_;
    };
    
    template<class T> T* Singleton<T>::instance_ = NULL;
    template<class T> pthread_mutex_t Singleton<T>::mutex_;
    

      

    使用:

    class WorkerPool : public Singleton<WorkerPool> {
    //methods & variables
    };
    WorkerPool* pool = WorkerPool::instance();
    

      

  • 相关阅读:
    Beta冲刺——集合随笔
    Beta冲刺——用户调查报告
    Beta冲刺——总结
    Beta冲刺——代码规范、冲刺任务与计划
    Beta冲刺——Day 7
    Beta冲刺——Day 6
    Beta冲刺——Day 5
    Beta冲刺——Day 4
    Beta冲刺——Day3
    beta冲刺汇总
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981997.html
Copyright © 2011-2022 走看看