template< typename T >
class CSingleton
{
public:
static T& Instance();
private:
static void MakeInstance();
static void DestroySingleton();
static T* m_pInstance;
private:
CSingleton();
CSingleton(const CSingleton&);
};
template<class T> T* CSingleton<T>::m_pInstance = 0;
template <class T>
T& CSingleton<T>::Instance()
{
if ( !m_pInstance)
{
MakeInstance();
}
return *m_pInstance;
}
template <class T>
inline void CSingleton<T>::MakeInstance()
{
if(!m_pInstance)
{
m_pInstance = new T;
::atexit(DestroySingleton);
}
}
template <class T>
void CSingleton<T>::DestroySingleton()
{
delete m_pInstance;
m_pInstance = 0;
class CSingleton
{
public:
static T& Instance();
private:
static void MakeInstance();
static void DestroySingleton();
static T* m_pInstance;
private:
CSingleton();
CSingleton(const CSingleton&);
};
template<class T> T* CSingleton<T>::m_pInstance = 0;
template <class T>
T& CSingleton<T>::Instance()
{
if ( !m_pInstance)
{
MakeInstance();
}
return *m_pInstance;
}
template <class T>
inline void CSingleton<T>::MakeInstance()
{
if(!m_pInstance)
{
m_pInstance = new T;
::atexit(DestroySingleton);
}
}
template <class T>
void CSingleton<T>::DestroySingleton()
{
delete m_pInstance;
m_pInstance = 0;
}
单例类的使用方法:
typedef CSingleton<MyClass> CSingletonMyClass;
MyClass是你自己的类,上面的代码就相当于声明了一个类型,然后我们调用CSingletonMyClass::Instance()->MyClass的函数
就可以调用MyClass中的函数了。