一、用模闆實作單例模式
在前面的文章中,用過多種方法實作單例模式,現在用模闆方式來實作:
為了實作線程安全,需要在linux 下使用pthread_mutex_t 加鎖,請使用g++ 編譯并需要連結 -lpthread
使用的是double-check lock, 指針instance_ 最好聲明為volatile,防止優化。
Singleton.h:
main.cpp:

即 将Singleton 實作為模闆類,将ApplicationImpl 類包裝成單例模式類,可以看到構造函數和析構函數都隻調用了一次。程式使用一個小技巧,用axexit 函數注冊了程式結束時需要調用的函數。
二、模闆方式實作動态建立對象
在前面的文章曾經使用宏定義的方式實作動态建立對象,現在在 DynBase.h 中用模闆類将宏定義替換掉,其他代碼不變:
即 REGISTER_CLASS(class_name) 宏定義展開會構造一個模闆類執行個體對象,調用3次宏定義即3個模闆類執行個體對象,調用構造函數
DelegatingClass(const string &name),進而調用Register 完成注冊,接下去的流程與以前的程式一樣,不再贅述。輸出如下:
參考:
C++ primer 第四版
Effective C++ 3rd
C++程式設計規範