码迷,mamicode.com
首页 > 其他好文 > 详细

简单的单例类和智能指针

时间:2014-09-27 14:43:19      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:des   blog   ar   sp   2014   art   on   c   log   

1.一个简单的单例类:

class Singleton
{
    public:
        static Singleton *getInstance()
        {
            if(pInstance_ == NULL){
                mutex_.lock();
                if(pInstance_ == NULL){
                    sleep(1);
                    pInstance_ = new Singleton;
                }
                mutex_.unlock();
            }
            return pInstance_;
        }
    private:
        Singleton(){}

        static Singleton *pInstance_;
        static MutexLock mutex_;
};

Singleton *Singleton::pInstance_ = NULL;
MutexLock Singleton::mutex_;

互斥锁类:

class MutexLock
{
    public:
        MutexLock()
        {
            if(pthread_mutex_init(&lock_, NULL)){
                throw std::runtime_error("init lock fail!");
            }
        }
        
        ~MutexLock()
        {
            if(pthread_mutex_destroy(&lock_)){
                throw std::runtime_error("destroy lock fail");
            }
        }

        void lock(){
            if(pthread_mutex_lock(&lock_)){
                throw std::runtime_error("lock failed!");
            }
        }

        void unlock(){
            if(pthread_mutex_unlock(&lock_)){
                throw std::runtime_error("unlock failed!");
            } 
        }

        //这里提供指针是为了cond的wait操作
        //这里不能为const
        pthread_mutex_t *getMutexLockPtr()
        {
            return &lock_;
        }

    private:
        pthread_mutex_t lock_;
};


 一个简单的智能指针类:

class SmartPtr
{
    public:
        SmartPtr(Animal *ptr):ptr_(ptr)
              {
               }
        ~SmartPtr()
         {
        delete ptr_;
         }
        Animal *operator->()
            {
           return ptr_;
          }
        const Animal *operator->() const
        {
           return ptr_;
          }

        Animal &operator*()
            {
               return *ptr_;
              }
        const Animal &operator*() const
          {
            return *ptr_;
              }
    private:
        DISALLOW_COPY_AND_ASSIGN(SmartPtr);
        T *ptr_;
};


简单的单例类和智能指针

标签:des   blog   ar   sp   2014   art   on   c   log   

原文地址:http://blog.csdn.net/aa838260772/article/details/39610099

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!