废话不多说,常用的代码积淀下来。
  一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。
  需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.
  使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。
  1、静态成员实例的懒汉模式:
1 class Singleton
2 {
3 private:
4     static Singleton* m_instance;
5     Singleton(){}
6 public:
7     static Singleton* getInstance();
8 };
9
10 Singleton* Singleton::getInstance()
11 {
12     if(NULL == m_instance)
13     {
14         Lock();//借用其它类来实现,如boost
15         if(NULL == m_instance)
16         {
17             m_instance = new Singleton;
18         }
19         UnLock();
20     }
21     return m_instance;
22 }
  2、内部静态实例的懒汉模式
  这里需要注意的是,C++0X以后,要求编译器保证内部静态变量的线程安全性,可以不加锁。但C++ 0X以前,仍需要加锁。
  1 class SingletonInside
  2 {
  3 private:
  4     SingletonInside(){}
  5 public:
  6     static SingletonInside* getInstance()
  7     {
  8         Lock(); // not needed after C++0x
  9         static SingletonInside instance;
  10         UnLock(); // not needed after C++0x
  11         return instance;
  12     }
  13 };