CEGUI风格的单例类如下:
普通的单例类如下:
一开始接触CEGUI时,觉着那个该风格单例类匪夷所思,它要求提前new出来你的单例类对象,
这点很蛋疼。后来发现,这种单例类有以下优势:
第一:你可以自行控制该单例类对象的生命周期
第二:可以应用到那些抽象类中(抽象类不能创建对象,对应 new T那句)
template<typename T>
class Singleton
{
public:
Singleton()
{
if(m_singleton)
throw std::exception("...");
m_singleton = static_cast<T*>(this);
}
virtual ~Singleton(){m_singleton = nullptr;}
T* getSingletonPtr(){ return m_singleton; }
T& getSingleton() { return *m_singlton; }
protected:
static T* m_singleton;
}
template<typename T>
T* Singleton<T>::m_singleton = nullptr;
普通的单例类如下:
template<typename T>
class Singleton
{
protected:
Singleton(){}
public:
virtual ~Singleton(){}
T* getSingletonPtr()
{
if(!m_pSingleton)
{
m_pSingleton = new T;
}
return m_singleton;
}
T& getSingleton() { return *getSingletonPtr(); }
protected:
static T* m_singleton;
}
template<typename T>
T* Singleton<T>::m_singleton = nullptr;
一开始接触CEGUI时,觉着那个该风格单例类匪夷所思,它要求提前new出来你的单例类对象,
这点很蛋疼。后来发现,这种单例类有以下优势:
第一:你可以自行控制该单例类对象的生命周期
第二:可以应用到那些抽象类中(抽象类不能创建对象,对应 new T那句)