设计模式——单例模式(Singleton)

  • 解决如何创建唯一对象的问题
  • 实现方法:
    • 通过一static变量记录唯一对象实例
    • 提供static接口获取这个实例
    • 禁用其它对象创建接口(构造函数私有化)
  • 示例代码:
     1 #include <iostream>
     2  using namespace std;
     3  
     4  class Singleton 
     5  {
     6  public:
     7      static Singleton& Instance() { return s; }
     8  private:
     9      static Singleton s;//静态数据成员的类型可以是其所属类
    10  private:
    11      Singleton() {}
    12      Singleton(const Singleton&);
    13  };
    14  
    15  //唯一对象
    16  Singleton Singleton::s;
    17  
    18  int main() 
    19  {
    20      Singleton& s = Singleton::Instance();
    21  
    22      return 0;
    23  }
  • 问题:静态变量有个初始化顺序问题,解决办法是将静态变量定义在函数中,仅当调用此函数时才初始化该静态变量
  • 示例代码:
     1 #include <iostream> 
     2  using namespace std; 
     3  
     4  class Singleton 
     5  { 
     6  public: 
     7      //静态变量放入函数中,调用时初始化
     8      static Singleton& Instance() 
     9      { 
    10          static Singleton s; 
    11          return s; 
    12      } 
    13  private:
    14      Singleton() {} 
    15      Singleton(const Singleton&); 
    16  }; 
    17  
    18  int main() 
    19  { 
    20      Singleton& s = Singleton::Instance(); 
    21  
    22      return 0;
    23  }
  • 参考:
    • 《Tinking in C++》
posted @ 2012-12-30 14:31  iThinking  阅读(200)  评论(0编辑  收藏  举报