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

网站技术团队广州建网站兴田德润可信

网站技术团队,广州建网站兴田德润可信,湖北高速公路建设网站,黄页推广币是什么意思单例模式 单例模式(Singleton Pattern,也称为单件模式),使用最广泛的设计模式之一。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 定义单例类 ● 私有化它的构造函数,…

单例模式

单例模式(Singleton Pattern,也称为单件模式),使用最广泛的设计模式之一。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

定义单例类

● 私有化它的构造函数,以防止外界创建单例类的对象;

● 使用类的私有静态指针变量指向类的唯一实例;

● 使用一个公有的静态方法获取该实例。

懒汉版

单例实例在第一次被使用时才进行初始化,这叫做延迟初始化。

class Singleton
{
private:static Singleton* instance;
private:Singleton() {};Singleton(const Singleton&);
public:static Singleton* getInstance(){if (instance == NULL)instance = new Singleton();return instance;}
};
Singleton* Singleton::instance = NULL;

饿汉模式

class Singleton {
public:static Singleton * getInstance() {return instance_;}
private:Singleton();Singleton(const Singleton&);static Singleton* instance_;
};
Singleton* Singleton::instance_ = new Singleton();

       懒汉式单例模式是一种延迟加载的单例模式,在需要时才创建实例。在多线程环境下,需要保证线程安全,避免多个线程同时创建实例。以下是一个线程安全的懒汉式单例模式的C++实现:

#include <mutex>class Singleton {
private:static Singleton* instance;static std::mutex mtx;// 私有构造函数,防止外部创建实例Singleton() {}public:// 获取单例实例的静态方法static Singleton* getInstance() {// 使用双重检查锁定(Double-Checked Locking)保证线程安全且避免不必要的锁开销if (instance == nullptr) {std::lock_guard<std::mutex> lock(mtx); // 加锁保护if (instance == nullptr) {instance = new Singleton();}}return instance;}// 禁止拷贝构造函数和赋值操作符Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};// 在类外初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;

       在上述代码中,我们使用了std::mutex来保护实例的创建过程,确保在多线程环境下只有一个线程能够创建实例。std::lock_guard用于自动管理锁的加锁和解锁,确保在函数返回时会自动解锁。

需要注意的是,由于需要保证单例对象唯一性,我们还禁止了拷贝构造函数和赋值操作符,以防止通过拷贝或赋值操作创建多个实例。

这样实现的懒汉式单例模式是线程安全的,但在某些情况下,双重检查锁定可能会导致一些性能问题。在现代C++中,还可以使用C++11引入的局部静态变量来实现线程安全的懒汉式单例模式,可以进一步简化代码并避免潜在的性能问题。

       当使用C++局部静态变量实现懒汉式单例模式时,我们在getInstance()方法中使用了局部静态变量。局部静态变量是在第一次执行该代码行时初始化,并且在程序的整个生命周期内保持其值,直到程序结束。这样的特性使得局部静态变量非常适合实现懒汉式单例模式,因为它们能够确保只有在第一次调用getInstance()方法时才会创建实例,以后的调用都会返回同一个实例。

以下是使用局部静态变量实现懒汉式单例模式的代码:

class Singleton {
private:// 私有构造函数,防止外部创建实例Singleton() {}public:// 获取单例实例的静态方法static Singleton* getInstance() {static Singleton instance; // 局部静态变量,在第一次调用时初始化,且只初始化一次return &instance;}// 禁止拷贝构造函数和赋值操作符Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};

为什么这样写?

这种实现方式是线程安全的,原因如下:

  1. C++11规定,局部静态变量在多线程环境下的初始化是线程安全的。编译器会保证在多线程环境下,局部静态变量的初始化只会发生一次,避免了多线程并发调用时重复创建实例的问题。

  2. 在调用getInstance()方法时,局部静态变量instance会被初始化,并在整个程序生命周期内保持其值。这保证了只有在第一次调用getInstance()方法时,才会创建实例并返回,以后的调用都将返回同一个实例。

需要注意的是,使用局部静态变量实现懒汉式单例模式不会涉及锁的使用,因此在性能上通常比双重检查锁定方式更高效。这是一种简洁且安全的单例模式实现方式。

http://www.yayakq.cn/news/365404/

相关文章:

  • 一个网站做几个关键词wordpress4.2 知更鸟
  • 遵义建站平台哪家好seo免费教程
  • 学校风采网站建设需求东莞高端建站公司
  • 国内做彩票网站违法么专业装修别墅
  • wordpress站所有分类不显示网站的系统建设方式
  • 做印章网站做网站去哪个平台
  • 一个网站一年的费用怎样做网站建设方案
  • 个人网站做什么好wordpress 搜索高亮
  • 制作团体网站简易网页设计代码
  • 个人网站怎么做cpswordpress d8主题 4.1
  • 网站建设有哪些岗位重庆黄埔seo整站优化
  • 青岛网站建设 推荐青岛博采网络上海青浦做网站公司
  • 如何把网站推广出去优化方案2021版英语答案
  • 济南做网站那家好旅游网站设计的目的与意义
  • 咸阳学校网站建设联系电话兰州网络推广昔年下拉博客
  • 经过开发建设 网站上线了免备案 网站加速
  • 企业怎么建设自己的网站首页找外国男人做老公网站
  • 运行两个wordpress厦门seo关键词
  • 网站面包屑导航设计即位置导航百度推广后台登录
  • 信用网站建设成效张掖交通建设投资有限责任公司网站
  • 爱名网做网站教程详情页设计说明
  • 网站建设价位高有低主网站怎么做熊掌号优化
  • php做简易网站公司注册资本
  • wordpress 导出export.php做第三方seo优化网站
  • 勒流网站制作做网站都需要年服务费吗
  • 怀仁建设局网站嘉兴网站优化联系方式
  • 高端建站选哪家石家庄关键词排名提升
  • 撤销网站备案申请书石家庄哪里做网站比较好
  • 做网站的背景照抖音自媒体平台注册入口
  • 嘉峪关市住房和城乡建设局网站seo培训机构哪家好