很简单的Singleton的实现,保持全局该类型变量的唯一性,在首次调用的时候创建,系统结束自行删除。
这里用到了上一篇的Smart Pointer。
template<class T>
class Singleton
{
public:
static T* Instance(void) {
if (m_pInstance == NULL)
m_pInstance = new Singleton;
return &(m_pInstance->m_Data);
}
private:
T m_Data;
static SmartPtr< Singleton<T> > m_pInstance;
};
template<class T>
SmartPtr< Singleton<T> > Singleton<T>::m_pInstance;
// example
// #define g_A (*Singleton<classA>::Instance())