31 #include "CreationPolicy.h" 32 #include "LifetimePolicy.h" 33 #include "Utilities/Threading/ThreadingModel.h" 34 #include "Core/Macro/Macro.h" 44 template<
typename>
class CreationPolicy = CreateWithNew,
45 template<
typename>
class LifetimePolicy = DefaultLifetime,
46 template<
typename>
class ThreadingModel = SingleThreaded
50 using InstanceType =
typename ThreadingModel<T>::VolatileType;
55 inline static InstanceType* instance =
nullptr;
59 inline static bool destroyed =
false;
64 static inline void DestroySingleton()
66 MX_ASSERT(instance !=
nullptr);
67 CreationPolicy<T>::Destroy(instance);
82 if (instance ==
nullptr)
84 typename ThreadingModel<T>::Lock guard;
88 LifetimePolicy<T>::OnDeadReference();
91 instance = CreationPolicy<T>::Create();
92 LifetimePolicy<T>::ScheduleDestruction(instance, &DestroySingleton);
Definition: SingletonHolder.h:48
static T & Instance()
Definition: SingletonHolder.h:80
Definition: Application.cpp:49