全网整合营销服务商

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

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

C++ 单例模式的详解及实例

C++ 单例模式的详解及实例

1.什么叫单例模式?

单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。
通过单例模式, 可以做到:

(1)确保一个类只有一个实例被建立
(2)提供了一个对对象的全局访问指针
(3)在不影响单例类的客户端的情况下允许将来有多个实例

2.怎样实现单例模式

一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。

3.具体实现

(1)最简单的单例模式(懒汉模式)

懒汉模式:懒汉式的特点是延迟加载,比如配置文件,采用懒汉式的方法,顾名思义,懒汉么,很懒的,配置文件的实例直到用到的时候才会加载。

class SiglenTon
{
public:
  static SiglenTon *GetInstence()
  {
    if( p == NULL)
    {
      p = new SiglenTon();
    }
    return p;
  }
private:
  SiglenTon()
  {
    cout<<"SiglenTon()"<<endl;
  }
  static SiglenTon *p;
};
SiglenTon *SiglenTon::p = NULL;
int main()
{
  SiglenTon *p = SiglenTon::GetInstence();
  return 0;
}

(2)第一种方式没有考虑到线程安全

class SiglenTon //(线程安全的饿汉模式)
{
public:
  static SiglenTon *GetInstence()
  {
    cout<<"static SiglenTon *GetInstence()"<<endl;
    pthread_mutex_lock(&mutex);
    if( p == NULL)
    {
      pthread_mutex_lock(&mutex);
      p = new SiglenTon();
      pthread_mutex_unlock(&mutex);
    }
    pthread_mutex_unlock(&mutex);
    return p;
  }

private:
  SiglenTon()
  {
    cout<<"SiglenTon()"<<endl;
  }
  static SiglenTon *p;
};
SiglenTon *SiglenTon::p = NULL;



int main()
{
  SiglenTon *p = SiglenTon::GetInstence();
  SiglenTon *p1 = p->GetInstence();

  return 0;
}

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

class SiglenTon
{
public:
  SiglenTon *GetInstence()
  {
    if( p == NULL)
    {
      return p;
    }
  }
private:
  SiglenTon()
  {
    cout<<"SiglenTon()"<<endl;
  }
  static SiglenTon *p;
};

以上就是对C++ 中单例模式的讲解,如有疑问请留言或者到本站社区进行交流讨论,感谢阅读,希望帮助到大家,谢谢大家对本站的支持!


# C++  # 单例模式  # 实现单例模式  # C++单例模式详解  # C++单例模式的几种实现方法详解  # C++单例模式的懒汉模式和饿汉模式详解  # C++实现单例模式的方法  # C++设计模式之单例模式详解  # C++实现单例模式的自动释放  # 详解C++实现线程安全的单例模式  # C++线程安全的单例模式讲解  # C++ 单例模式的几种实现方式研究  # C++单例模式的实例详解  # C++ 超详细深入分析单例模式  # 配置文件  # 有一个  # 加载  # 鼠标  # 多个  # 有很多  # 如有  # 才会  # 一台  # 考虑到  # 只有一个  # 只需要  # 什么叫  # 顾名思义  # 管理器  # 谢谢大家  # 提供一个  # 最简单  # 第一种  # 可以做到 


相关文章: c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何用景安虚拟主机手机版绑定域名建站?  网站制作公司,橙子建站是合法的吗?  网站制作公司排行榜,四大门户网站排名?  如何在服务器上配置二级域名建站?  高性价比服务器租赁——企业级配置与24小时运维服务  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  建站之星如何实现PC+手机+微信网站五合一建站?  香港服务器部署网站为何提示未备案?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何在IIS中新建站点并配置端口与物理路径?  建站之星CMS五站合一模板配置与SEO优化指南  已有域名和空间,如何快速搭建网站?  定制建站策划方案_专业建站与网站建设方案一站式指南  网站插件制作软件免费下载,网页视频怎么下到本地插件?  宝塔面板如何快速创建新站点?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  在线教育网站制作平台,山西立德教育官网?  网站制作报价单模板图片,小松挖机官方网站报价?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  TestNG的testng.xml配置文件怎么写  专业公司网站制作公司,用什么语言做企业网站比较好?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  建站主机选择指南:服务器配置与SEO优化实战技巧  安徽网站建设与外贸建站服务专业定制方案  如何高效利用200m空间完成建站?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  历史网站制作软件,华为如何找回被删除的网站?  ,想在网上投简历,哪几个网站比较好?  如何设置并定期更换建站之星安全管理员密码?  如何通过虚拟主机快速搭建个人网站?  名字制作网站免费,所有小说网站的名字?  建站之星如何开启自定义404页面避免用户流失?  如何通过西部数码建站助手快速创建专业网站?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  表情包在线制作网站免费,表情包怎么弄?  青岛网站建设如何选择本地服务器?  已有域名和空间如何快速搭建网站?  建站主机是否属于云主机类型?  建站主机如何选?高性价比方案全解析  网站制作免费,什么网站能看正片电影?  Java解压缩zip - 解压缩多个文件或文件夹实例  如何快速建站并高效导出源代码?  Android滚轮选择时间控件使用详解  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  开源网站制作软件,开源网站什么意思? 

您的项目需求

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