00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef KEOS_SINGLETON_H
00023 #define KEOS_SINGLETON_H
00024
00025 #include "KeosPrerequisites.h"
00026
00027 namespace Keos
00028 {
00029
00033 template <class T>
00034 class CSingleton
00035 {
00036 public :
00037
00041 static void Create()
00042 {
00043 if (!ms_pInst)
00044 ms_pInst = new T;
00045 }
00046
00050 static T& Instance()
00051 {
00052 if (!ms_pInst)
00053 ms_pInst = new T;
00054
00055 return *ms_pInst;
00056 }
00057
00061 static void Destroy()
00062 {
00063 delete ms_pInst;
00064 ms_pInst = NULL;
00065 }
00066
00070 static void _SetInstance(T* pInst)
00071 {
00072 ms_pInst = pInst;
00073 }
00074
00075 protected :
00076
00080 CSingleton()
00081 {}
00082
00086 ~CSingleton()
00087 {}
00088
00089 private :
00090
00092 static T* ms_pInst;
00093
00097 CSingleton(CSingleton&);
00098
00102 void operator =(CSingleton&);
00103 };
00104
00105
00106 template <class T> T* CSingleton<T>::ms_pInst = NULL;
00107
00108 }
00109
00110 #endif // KEOS_SINGLETON_H