싱글톤 패턴 Singleton
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include<stdio.h> #include<assert.h> #include<vector> #define AfxGetApp() KSingleton<CWinApp>::GetSingleton() template<typename T> class KSingleton { private: static T* ms_pSingleton; public: KSingleton() { assert( NULL == KSingleton<T>::ms_pSingleton); KSingleton<T>::ms_pSingleton == NULL; } ~KSingleton() { KSingleton<T>::ms_pSingleton = NULL; } static T* GetSingleton() { return ms_pSingleton; } }; template<typename T> T* KSingleton<T>::ms_pSingleton = NULL; class CWinApp : public KSingleton<CWinApp> { public : void Print() { printf("hello\n"); } }; CWinApp theApp; void main() { //KSingleton<CWinApp>::GetSingleton()->Print(); //CWinApp::GetSingleton()->Print(); ?? AfxGetApp()->Print(); } |