#include <iostream> class Singleton { public : static Singleton* GetInstance( ) // 獲取對象單例的指針 { // 此處進行了兩次m_Instance == NULL的判斷, // 是借鑒了Java的單例模式實現時, // 使用的所謂的“雙檢鎖”機制。 // 因為進行一次加鎖和解鎖是需要付出對應的代價的, // 而進行兩次判斷,就可以避免多次加鎖與解鎖操作, // 同時也保證了線程安全 if(Singleton::m_singleton == NULL) // { Lock( ); // 此處可以調用其他庫的鎖線程,或者自己實現一個 if(Singleton::m_singleton == NULL) // 如果單例對象沒有創建, 則將其創建 { Singleton::m_singleton = new Singleton( ); } Unlock( ); // 此處可以調用其他庫的鎖線程,或者自己實現一個 } return Singleton::m_singleton; } static void DestroyInstance( ) // 銷毀單例對象的空間 { if(Singleton::m_singleton != NULL) { delete Singleton::m_singleton; Singleton::m_singleton = NULL; } } private : Singleton( ) // 構造函數[被保護] { } Singleton(const Singleton &singleton) // 賦值構造函數[被保護] { } ~Singleton( ) // 析構函數 { } static Singleton *m_singleton; // 指向單例對象的指針 }; int main() { Singleton *sp1 = Singleton::GetInstance( ); Singleton *sp2 = Singleton::GetInstance( ); std::cout <<(sp1 == sp2) <<std::endl; Singleton::DestroyInstance( ); return 0; }