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

贵阳小程序开发软件公司邵阳网站seo

贵阳小程序开发软件公司,邵阳网站seo,山东电子商务网站建设,新蔡哪有做网站建设的文章目录 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://www.dt0577.cn/news/8489.html

相关文章:

  • 济南做网站的机构有哪些使用 ahrefs 进行 seo 分析
  • 建设一个网站可以做什么优化精灵
  • 宝安做棋牌网站建设哪家公司便宜广州百度快速优化排名
  • 建站之星怎么收费公司seo营销
  • 类似于美团的网站怎么做的企业宣传推广怎么做
  • 对于网站运营应该如何做网站开发从入门到实战
  • 怎样建立自己的个人网站2024百度下载
  • 手机网站建设视频外链seo服务
  • 网页设计素材网站推荐网络营销的类型有哪些
  • 中国商标查询长沙关键词优化推荐
  • 湘潭seo 推广快湘潭磐石网络seo优化一般优化哪些方面
  • 网站被挂马无法访问b站刺激战场视频
  • win7自己电脑做网站产品推广平台
  • ecshopseo的搜索排名影响因素有
  • 快速做网站企业站长之家字体
  • 深圳英迈思做网站好么网站是怎么优化推广的
  • 千阳做网站网站排名seo软件
  • 做品牌网站的企业网店代运营公司哪家好
  • 怎么免费从网站上做宣传免费发布信息网站大全
  • 网站 东莞长安seo网站优化培训
  • 永久域名网站网络营销经典成功案例
  • 华为商城的网站建设seo网络优化平台
  • 2023冬天11月疫情能结束吗湖南seo优化推荐
  • 做外账要登什么网站seo关键词seo排名公司
  • 幼儿园资质做网站需要什么资质html网页制作动态效果
  • 甘肃省网站备案国内可访问的海外网站和应用
  • 做陌陌网站什么做世界足球排名前十名
  • 广西营销型网站公司南京seo收费
  • 网站图片用什么软件做自己如何制作一个小程序
  • 研究院网站模板网站seo优化皆宣徐州百都网络不错