使用boost庫實現單例模式
阿新 • • 發佈:2018-11-19
單例模式是最常使用的設計模式之一,特別在跨檔案程式設計時使用的最多。 #include<boost/noncopyable.hpp> #include<pthread.h> #include<stdlib.h> template<typename T> class Singleton: boost::noncopyable //預設使用private繼承,顯示public也OK { public: static T &instance() //注意只對外提供一個介面 { pthread_once(&_once,&Singleton<T>::init); //使用執行緒庫中pthread_once,函式只執行一次 return *value; } private: static void init() { value = new T(); ::atexit(destroy); //程式結束時會呼叫 } static void destroy() { typedef char check_complete[sizeof(T) == 0 ? -1:1]; //如果型別T只有宣告,沒有定義,編譯不通過 (typedef在編譯時執行) delete value; } private: static T* value; static pthread_once_t _once; }; template<typename T> pthread_once_t Singleton<T>::_once = PTHREAD_ONCE_INIT; template<typename T> T* Singleton<T>::value = NULL;