template <typename T> class Singleton
{
protected:
static T* ms_singleton;
public:
Singleton()
{
assert(!ms_singleton);
ms_singleton = static_cast<T*>(this);
}
~Singleton()
{
assert(ms_singleton);
ms_singleton = NULL;
}
inline static T& getSingleton()
{
assert(ms_singleton);
return (*ms_singleton);
}
inline static T* getSingletonPtr()
{
return ms_singleton;
}
};
编写单例类只需要继承即可
例:class xx : public Singleton < xx >
改进:ms_singleton为空,new