diff --git a/csingleton.h b/csingleton.h
index e69de29..f40f21a 100644
--- a/csingleton.h
+++ b/csingleton.h
@@ -0,0 +1,21 @@
+#ifndef CSINGLETON_H
+#define CSINGLETON_H
+
+class CSingleton {
+public:
+    status CSingleton* Get_Instance(void) {
+        if (m_pInstance == NULL) {
+            m_pInstance = new CSingleton();
+        }
+
+        return m_pInstance;
+    }
+private:
+    CSingleton() {}
+private:
+    static CSingleton* m_pInstance;
+};
+
+
+
+#endif
diff --git a/csingleton.h b/csingleton.h
index e69de29..41a1f32 100644
--- a/csingleton.h
+++ b/csingleton.h
@@ -0,0 +1,19 @@
+#ifndef CSINGLETON_H
+#define CSINGLETON_H
+
+class CSingleton {
+public:
+    static CSingleton* Get_Instance(void) {
+        if (m_pInstance == NULL) {
+            m_pInstance = new CSingleton();
+        }
+
+        return m_pInstance;
+    }
+private:
+    CSingleton() {}
+private:
+    static CSingleton* m_pInstance;
+};
+
+#endif
diff --git a/main.cpp b/main.cpp
index e69de29..84677c6 100644
--- a/main.cpp
+++ b/main.cpp
@@ -0,0 +1,24 @@
+#include <cstdio>
+#include "./csingleton.h"
+
+CSingleton* CSingleton::m_pInstance = NULL;
+
+int main(int argc, char *argv[])
+{
+    CSingleton* ps1 = CSingleton::Get_Instance();
+    CSingleton* ps2 = CSingleton::Get_Instance();
+    CSingleton* ps3 = ps1->Get_Instance();
+    CSingleton& ps4 = *CSingleton::Get_Instance();
+
+    if (ps1 == ps2) {
+        fprintf(stdout, "ps1 = ps2\n");
+    }
+    if (ps1 == ps3) {
+        fprintf(stdout, "ps1 = ps3\n");
+    }
+    if (ps1 == &ps4) {
+        fprintf(stdout, "ps1 = ps4\n");
+    }
+
+    return 0;
+}