全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++实现 单例模式实例详解

设计模式之单例模式C++实现

一、经典实现(非线程安全)

class Singleton 
{ 
  public: 
    static Singleton* getInstance(); 
  protected: 
    Singleton(){} 
  private: 
    static Singleton *p; 
}; 
 
Singleton* Singleton::p = NULL; 
Singleton* Singleton::getInstance() 
{ 
  if (NULL == p) 
    p = new Singleton(); 
  return p; 
} 

二、懒汉模式与饿汉模式

懒汉:故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化,所以上边的经典方法被归为懒汉实现;

饿汉:饿了肯定要饥不择食。所以在单例类定义的时候就进行实例化。

特点与选择

由于要进行线程同步,所以在访问量比较大,或者可能访问的线程比较多时,采用饿汉实现,可以实现更好的性能。这是以空间换时间。在访问量较小时,采用懒汉实现。这是以时间换空间。

线程安全的懒汉模式

1.加锁实现线程安全的懒汉模式

class Singleton 
{ 
  public: 
    static pthread_mutex_t mutex; 
    static Singleton* getInstance(); 
  protected: 
    Singleton() 
    { 
      pthread_mutex_init(&mutex); 
    } 
  private: 
    static Singleton* p; 
}; 
 
pthread_mutex_t Singleton::mutex; 
Singleton* Singleton::p = NULL; 
Singleton* Singleton::getInstance() 
{ 
  if (NULL == p) 
  { 
    pthread_mutex_lock(&mutex); 
    if (NULL == p) 
      p = new Singleton(); 
    pthread_mutex_unlock(&mutex); 
  } 
  return p; 
}

2.内部静态变量实现懒汉模式

class Singleton 
{ 
  public: 
  static pthread_mutex_t mutex; 
  static Singleton* getInstance(); 
  protected: 
    Singleton() 
    { 
      pthread_mutex_init(&mutex); 
    } 
}; 
 
pthread_mutex_t Singleton::mutex; 
Singleton* Singleton::getInstance() 
{ 
  pthread_mutex_lock(&mutex); 
  static singleton obj; 
  pthread_mutex_unlock(&mutex); 
  return &obj; 
} 


饿汉模式(本身就线程安全)

class Singleton 
{ 
  public: 
    static Singleton* getInstance(); 
  protected: 
    Singleton(){} 
  private: 
    static Singleton* p; 
}; 
 
Singleton* Singleton::p = new Singleton; 
Singleton* Singleton::getInstance() 
{ 
  return p; 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++  # 单例模式  # 单例模式详解  # C++实现单例模式的自动释放  # 详解C++实现线程安全的单例模式  # C++ 单例模式的几种实现方式研究  # 使用设计模式中的单例模式来实现C++的boost库  # C++实现单例模式的方法  # 这是  # 会去  # 饥不择食  # 就不  # 万不得已  # 希望能  # 可以实现  # 比较大  # 谢谢大家  # 饿了  # 肯定要  # 故名  # 加锁  # 也就是说  # protected  # span  # private  # return  # NULL  # br 


相关文章: 建站主机选购指南:核心配置优化与品牌推荐方案  如何快速搭建个人网站并优化SEO?  网站制作公司,橙子建站是合法的吗?  建站之星免费版是否永久可用?  魔方云NAT建站如何实现端口转发?  教学网站制作软件,学习*后期制作的网站有哪些?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  独立制作一个网站多少钱,建立网站需要花多少钱?  建站之星代理平台如何选择最佳方案?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  如何通过西部建站助手安装IIS服务器?  建站DNS解析失败?如何正确配置域名服务器?  设计网站制作公司有哪些,制作网页教程?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站10G流量真的够用吗?如何应对访问高峰?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  制作网站公司那家好,网络公司是做什么的?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何在Golang中使用replace替换模块_指定本地或远程路径  外贸公司网站制作,外贸网站建设一般有哪些步骤?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何确保西部建站助手FTP传输的安全性?  如何在建站之星网店版论坛获取技术支持?  浅析上传头像示例及其注意事项  如何用低价快速搭建高质量网站?  如何快速搭建安全的FTP站点?  名字制作网站免费,所有小说网站的名字?  在线制作视频网站免费,都有哪些好的动漫网站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何选择高效可靠的多用户建站源码资源?  如何快速生成高效建站系统源代码?  如何在新浪SAE免费搭建个人博客?  广东企业建站网站优化与SEO营销核心策略指南  建站主机数据库如何配置才能提升网站性能?  建站主机与虚拟主机有何区别?如何选择最优方案?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  如何用狗爹虚拟主机快速搭建网站?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  建站之星后台密码遗忘?如何快速找回?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  建站之星安装步骤有哪些常见问题?  如何用y主机助手快速搭建网站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  免费视频制作网站,更新又快又好的免费电影网站?  如何快速生成橙子建站落地页链接?  制作网站怎么制作,*游戏网站怎么搭建? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。