#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; }