C++ 单例模式

实现方式一:
#include <pthread.h>

template<typename T>
class Singleton : boost::noncopyable {
public:
    static T& instance() {
        pthread_once(&ponce_, &Singleton::init);
        return *value_;
    }
    
    static void init() {
        value_ = new T();
    }
private:
    static pthread_once_t ponce_;
    static T* value_;
};

template<typename T>
pthread_once_t Singleton<T>::ponce_ = PTHREAD_ONCE_INIT;

template<typename T>
T* Singleton<T>::value_ = NULL;

实现方式二:

#ifndef LOCKER_H_

#define LOCKER_H_

#include "pthread.h"

class locker

{

public:

    inline locker(){        pthread_mutex_init(&mutex,NULL);}

    inline ~locker(){       pthread_mutex_destroy(&mutex);}

    inline void lock(){     pthread_mutex_lock(&mutex);}

    inline void unlock(){   pthread_mutex_unlock(&mutex);}

private:

    pthread_mutex_t mutex;

};

#endif /* LOCKER_H_ */

#ifndef __SINGLETON_H__

#define __SINGLETON_H__

template <typename T>

class Singleton

{

public:

inline static T* getInstance();

inline static void release();

private:

static T* t;

static locker llocker;

};

template <typename T>

inline T* Singleton<T>::getInstance()

{

llocker.lock();

if (!t)

{

t = new T;

}

llocker.unlock();

return t;

}

template<typename T>

inline void Singleton<T>::release()

{

llocker.lock();

if (t)

{

delete t;

t = 0;

}

llocker.unlock();

}

template <typename T> 

T* Singleton<T>::t = 0;

locker Singleton<T>::llocker

#endif // __SINGLE_H__



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值