在游戏开发中单例模式几乎是用得最广的设计模式之一,该设计模式保证系统中有且仅有单例类的一个实例,一般游戏里的各种资源的管理器都设计成单例类,单例实例的创建和销毁只能通过自己来完成。 由于使用平凡,所以写个模板单例还是非常有必要的,废话不多,上硬菜.
#ifndef _TSINGLETON_H
#define _TSINGLETON_H
class Tag_Manual;
class Tag_Auto;
template< typename T, typename TypeTag=Tag_Manual>class Singleton; //one parameter for default manual type
template<typename T>
class Singleton<T, Tag_Manual>
{
public:
static T& instance()
{
if ( NULL == instance_ )
{
instance_ = new T;
}
return *instance_;
}
static void destroy()
{
if ( NULL != instance_ )
{
delete instance_;
instance_ = NULL;
}
}
void doSomething(){}
protected:
Singleton(void){}
~Singleton(void){}
private:
static T* instance_;
Singleton( const Singleton& );
Singleton& operator=( const Singleton& );
};
template<typename T>
T* Singleton<T,Tag_Manual>::instance_= NULL;
//*****************Auto version*********************//
template<typename T>
class Singleton<T, Tag_Auto>
{
public:
static T& instance()
{
static T obj;
obj.doSomething();
return obj;
}
void doSomething(){}
protected:
Singleton(void){}
~Singleton(void){}
private:
Singleton( const Singleton& );
const Singleton& operator=( const Singleton& );
};
#endif //_TSINGLETON_H
由于自己涉及到的游戏开发内容基本都是单线程的,所以没有考虑到线程安全,以上版本仅适用于单线程开发