设计模式之单例模式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小时内与您取得联系。