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

本文详细介绍了单例模式的实现方法,包括如何创建唯一对象、确保线程安全及解决静态变量初始化顺序问题。提供了两种实现方式的示例代码,并推荐了参考书籍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 解决如何创建唯一对象的问题
  • 实现方法:
    • 通过一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++》

转载于:https://www.cnblogs.com/dahai/archive/2012/12/30/2839738.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值