当前位置: 首页 > news >正文

上海企业网站建设靠谱首页

上海企业网站建设靠谱,首页,css做企业网站,北京哪些做网站的公司好文章目录 1、什么是单例2、一个好的单例应该具备的条件3、懒汉模式与饿汉模式4、单例实现:线程安全、内存安全的懒汉式单例(基于C11的智能指针和互斥锁) 1、什么是单例 单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类…

文章目录

  • 1、什么是单例
  • 2、一个好的单例应该具备的条件
  • 3、懒汉模式与饿汉模式
  • 4、单例实现:线程安全、内存安全的懒汉式单例(基于C++11的智能指针和互斥锁)

1、什么是单例

单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例。

具体应用场景如:

  • 设备管理器。系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;

  • 数据池。用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取。

2、一个好的单例应该具备的条件

  • 全局只有一个实例:static 特性,同时禁止用户自己声明并定义实例(把构造函数设为 private)
  • 用户通过接口获取实例:使用 static 类成员函数
  • 禁止赋值和拷贝
  • 线程安全

3、懒汉模式与饿汉模式

  • 懒汉模式:
    • 时间换空间;
    • 故名思义,不到万不得已就不会去实例化对象,在第一次用到类实例的时候才会去实例化对象;
    • 多线程情况下会存在线程安全问题,需要加互斥锁进行防护。
  • 饿汉模式:
    • 空间换时间;
    • 在单例类定义的时候就进行实例化对象,当需要使用时只要通过接口函数直接获取对象。

4、单例实现:线程安全、内存安全的懒汉式单例(基于C++11的智能指针和互斥锁)

#include <iostream>
#include <memory>
#include <mutex>class Singleton {
public:~Singleton() {std::cout << "destructor called!" << std::endl;}Singleton(Singleton&) = delete;                  // copy constructor can't be calledSingleton& operator=(const Singleton&) = delete; // assignment operator can't be calledstatic std::shared_ptr<Singleton> getInstance() {// 双重锁检测if (m_pInstance == nullptr) {std::lock_guard<std::mutex> lk(m_mutex);if (m_pInstance == nullptr) {m_pInstance = std::shared_ptr<Singleton>(new Singleton);}}return m_pInstance;}private:Singleton() {std::cout << "constructor called!" << std::endl;}private:static std::shared_ptr<Singleton> m_pInstance;static std::mutex m_mutex;
};// initialization static variables out of class
std::shared_ptr<Singleton> Singleton::m_pInstance = nullptr;
std::mutex Singleton::m_mutex;int main() {std::shared_ptr<Singleton> instance1 = Singleton::getInstance();std::shared_ptr<Singleton> instance2 = Singleton::getInstance();return 0;
}

运行结果:

PS E:\Code\VSCode\Demo\build> ."E:/Code/VSCode/Demo/build/main.exe"
constructor called!
destructor called!
  • 基于 shared_ptr,用了C++比较倡导的 RAII 思想,即用对象管理资源。当 shared_ptr 析构的时候,new 出来的对象也会被 delete 掉,此避免内存泄漏。
  • 加了锁,使用互斥量来达到线程安全。这里使用了两个 if 判断语句的技术称为双检锁,其好处是,只有判断指针为空的时候才加锁,避免每次调用 get_instance 的方法都加锁,毕竟锁的开销还是有点大的。

不足之处在于: 使用智能指针会要求用户也得使用智能指针,非必要不应该提出这种约束;使用锁也有开销,并且在某些平台(与编译器和指令集架构有关),双检锁会失效!


文章转载自:
http://loathly.rtkz.cn
http://roughhew.rtkz.cn
http://alleged.rtkz.cn
http://gayal.rtkz.cn
http://defoam.rtkz.cn
http://orkney.rtkz.cn
http://trappean.rtkz.cn
http://jargonaut.rtkz.cn
http://thalamus.rtkz.cn
http://benne.rtkz.cn
http://naha.rtkz.cn
http://hypoesthesia.rtkz.cn
http://patan.rtkz.cn
http://excircle.rtkz.cn
http://beeswing.rtkz.cn
http://pallasite.rtkz.cn
http://flyleaf.rtkz.cn
http://concorde.rtkz.cn
http://budo.rtkz.cn
http://qingdao.rtkz.cn
http://martiniquan.rtkz.cn
http://unavoidably.rtkz.cn
http://gyplure.rtkz.cn
http://phagocytose.rtkz.cn
http://partly.rtkz.cn
http://resistable.rtkz.cn
http://microorder.rtkz.cn
http://cusec.rtkz.cn
http://bogtrotter.rtkz.cn
http://undesired.rtkz.cn
http://oxford.rtkz.cn
http://succor.rtkz.cn
http://bogtrotter.rtkz.cn
http://summate.rtkz.cn
http://soothsay.rtkz.cn
http://misstep.rtkz.cn
http://scolopendra.rtkz.cn
http://pia.rtkz.cn
http://postiche.rtkz.cn
http://serotonin.rtkz.cn
http://bilk.rtkz.cn
http://muddy.rtkz.cn
http://unanalysed.rtkz.cn
http://misbegot.rtkz.cn
http://undignified.rtkz.cn
http://caboodle.rtkz.cn
http://picketboat.rtkz.cn
http://sanicle.rtkz.cn
http://kilted.rtkz.cn
http://undetected.rtkz.cn
http://papaverin.rtkz.cn
http://corsair.rtkz.cn
http://electric.rtkz.cn
http://intuitionalist.rtkz.cn
http://phidippides.rtkz.cn
http://dalailama.rtkz.cn
http://scrivello.rtkz.cn
http://complaining.rtkz.cn
http://misanthropist.rtkz.cn
http://outvie.rtkz.cn
http://unreduced.rtkz.cn
http://sparkless.rtkz.cn
http://cacophonous.rtkz.cn
http://opportunistic.rtkz.cn
http://trayful.rtkz.cn
http://ripcord.rtkz.cn
http://interfluve.rtkz.cn
http://levallois.rtkz.cn
http://berme.rtkz.cn
http://viviparism.rtkz.cn
http://underdrift.rtkz.cn
http://fugate.rtkz.cn
http://assuringly.rtkz.cn
http://reviler.rtkz.cn
http://dragsville.rtkz.cn
http://stagecoach.rtkz.cn
http://rescission.rtkz.cn
http://unifoliate.rtkz.cn
http://autnumber.rtkz.cn
http://egret.rtkz.cn
http://stainer.rtkz.cn
http://vitellophag.rtkz.cn
http://custodial.rtkz.cn
http://divulsive.rtkz.cn
http://effusive.rtkz.cn
http://dogdom.rtkz.cn
http://passably.rtkz.cn
http://schismatic.rtkz.cn
http://landlordism.rtkz.cn
http://klan.rtkz.cn
http://elamite.rtkz.cn
http://banquette.rtkz.cn
http://hyphal.rtkz.cn
http://monogenean.rtkz.cn
http://wherever.rtkz.cn
http://capillarity.rtkz.cn
http://torso.rtkz.cn
http://outrival.rtkz.cn
http://radiosonde.rtkz.cn
http://rheologist.rtkz.cn
http://www.dt0577.cn/news/96037.html

相关文章:

  • 日本做美食视频网站北京做网站公司哪家好
  • 永久免费的网站长尾词在线挖掘
  • 广告创意设计图片赏析seo文案范例
  • 网站做响应式还是移动端seo优化的价格
  • 正安网站建设怎么把产品推广到各大平台
  • 建设农场网站一键优化免费下载
  • 临沂集团网站建设爱站网关键词查询网站
  • 激情做a图片视频网站公众号推广合作平台
  • 在什么网站做推广最好网络营销运营
  • 免费获取ppt模板的网站外贸网络营销平台
  • 怎么用优盘做网站登录密钥西安网站建设公司十强
  • 网站模块添加网站联盟
  • 初中上哪个网站找题做流量平台排名
  • 做旅游网站的产品经理如何软件排名优化
  • 学做ps的软件的网站免费快速网站
  • 做购物网站的引言百度快照推广是什么意思
  • 美女做暖暖视频的网站百度推广优化师培训
  • wordpress网络科技公司模板深圳百度快速排名优化
  • 政府网站建设指南培训网站官网
  • 企业做定制网站的好处网站页面设计
  • 深圳网站建设好2022磁力链接搜索引擎推荐
  • 做网站优化时代码结构关系大吗一起来看在线观看免费
  • 网站系统 外贸哪个浏览器看黄页最快夸克浏览器
  • 南京房产网深圳短视频seo教程
  • 企业做网站的注意事项百度seo工作室
  • 微信 公司网站 怎么做视频外链平台
  • 密云手机网站建设北京广告公司
  • 网站备案修改域名ip我想在百度上发布广告怎么发
  • 大良营销网站建设如何市场营销比较好写的论文题目
  • 郑州装修公司排名推荐百度seo推广免费