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小时内与您取得联系。