summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/singleton.hpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-29 22:51:04 +0800
committerchai <chaifix@163.com>2019-03-29 22:51:04 +0800
commitc302f5ae5f9e30a28e487e8a764d9cc31546bbea (patch)
tree7f18bedeece950600336ea7ced7c52c468552c98 /source/modules/asura-utils/singleton.hpp
parent157530b8b6e11efc5573d5a0db8987a440197aa1 (diff)
*rename
Diffstat (limited to 'source/modules/asura-utils/singleton.hpp')
-rw-r--r--source/modules/asura-utils/singleton.hpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/source/modules/asura-utils/singleton.hpp b/source/modules/asura-utils/singleton.hpp
new file mode 100644
index 0000000..0d2777e
--- /dev/null
+++ b/source/modules/asura-utils/singleton.hpp
@@ -0,0 +1,59 @@
+#ifndef __ASURA_SINGLETON_H__
+#define __ASURA_SINGLETON_H__
+
+#include "utils_config.h"
+
+namespace AsuraEngine
+{
+
+ ///
+ /// ̳Singletonڵһʵʱʵ֮ٴʵᱨ
+ ///
+ template<class T>
+ class Singleton
+ {
+ public:
+
+ static T* Get()
+ {
+ // ֮ǰûдһ
+ if (!instance) instance = new T;
+ // ʵ
+ return instance;
+ }
+
+ static void Destroy()
+ {
+ delete instance;
+ instance = nullptr;
+ }
+
+ protected:
+
+ Singleton()
+ {
+ // instanceζִһʵǴġ
+ ASSERT(!instance);
+ // 򣬽ʵΪʵ
+ instance = static_cast<T*>(this);
+ };
+
+ virtual ~Singleton() {};
+
+ static T* instance;
+
+ private:
+
+ Singleton(const Singleton& singleton);
+
+ Singleton& operator = (const Singleton& singleton);
+
+ };
+
+ // ʵʼΪ
+ template<class T>
+ T* Singleton<T>::instance = nullptr;
+
+}
+
+#endif // __ASURA_SINGLETON_H__ \ No newline at end of file