template <class T>
class FvSingleton
{
protected:
static T *ms_pkInstance;
public:
FvSingleton()
{
CCASSERT(ms_pkInstance == NULL,"");
ms_pkInstance = static_cast< T * >( this );
}
virtual ~FvSingleton()
{
ms_pkInstance = 0;
}
static T &Instance()
{
if (ms_pkInstance == nullptr)
{
new T;
}
return *ms_pkInstance;
}
static T *pInstance()
{
return ms_pkInstance;
}
};
#define FV_SINGLETON_STORAGE( TYPE )
template <>
TYPE * FvSingleton< TYPE >::ms_pkInstance = 0;