summaryrefslogtreecommitdiff
path: root/Source/modules/asura-base/Singleton.hpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-07 21:08:47 +0800
committerchai <chaifix@163.com>2019-08-07 21:08:47 +0800
commit0c391fdbce5a079cf03e483eb6174dd47806163d (patch)
treeb06cd7a9d0ae0d9bb9e82f3dcb786dfce11f8628 /Source/modules/asura-base/Singleton.hpp
parent9686368e58e25cbd6dc37d686bdd2be3f80486d6 (diff)
*misc
Diffstat (limited to 'Source/modules/asura-base/Singleton.hpp')
-rw-r--r--Source/modules/asura-base/Singleton.hpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/Source/modules/asura-base/Singleton.hpp b/Source/modules/asura-base/Singleton.hpp
new file mode 100644
index 0000000..9bb7336
--- /dev/null
+++ b/Source/modules/asura-base/Singleton.hpp
@@ -0,0 +1,59 @@
+#ifndef _ASURA_SINGLETON_H_
+#define _ASURA_SINGLETON_H_
+
+#include "UtilsConfig.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