考虑到:
1.析构、构造函数、拷贝构造函数、赋值操作的私有。
2.对象句柄的初始化和析构后的清0.
3.线程安全。
4.异常安全。
如果有网友发现还有改进的地方请指出。
#ifndef SINGLETON_H_
#define SINGLETON_H_
#include <pthread.h>
class lock //资源管理类。
{
private:
pthread_mutex_t* p_mutex;
lock(const lock& lk){} //资源不可以复制。
lock& operator=(const lock& lk){}
public :
lock(pthread_mutex_t* mutex):p_mutex(mutex)
{
pthread_mutex_lock(p_mutex);
}
~lock()
{
pthread_mutex_unlock(p_mutex);
}
};
class singleton
{
private:
static singleton* m_single;
static pthread_mutext_t m_mutex;
singleton(){}
~singleton(){
if(m_single)
{
lock mutex(m_mutex);
if(m_single)
{
delete m_single;
m_single=0; //注意清0.
}
}
}
singleton(const singleton& sin){} //将拷贝构造和复制操作私有
singleton& operator=(const singleton& sin){}
public:
static singleton* getSingleTon()
{
if(!m_single)
{
lock mutex(m_mutex); //线程安全。
if(!m_single)
m_single=new s ingleton;
}
return m_single;
}
static void destroySingleTon()
{
~singleton();
}
};
pthread_mutext_t singleton::m_mutex=PTHREAD_MUTEX_INITIALIZER;
singleton* singleton:: m_single=0;
#endif