【C++】C++ 单例模式总结(5种单例实现方法)

您所在的位置:网站首页 学校创建特色的几种基本模式是什么 【C++】C++ 单例模式总结(5种单例实现方法)

【C++】C++ 单例模式总结(5种单例实现方法)

2024-07-01 22:43:41| 来源: 网络整理| 查看: 265

本文对 C++ 的单例模式进行简单介绍和实现。

参考:

C++ 线程安全的单例模式总结(强烈建议阅读原文,本文相当于做了总结,留作学习,并添加了一种新的单例方法 std::call_once ) 目录

文章目录 目录1. 什么是单例模式为什么需要单例模式线程安全单例模式分类单例类的特点 2. 单例模式实现普通懒汉式单例(线程不安全)静态局部变量的懒汉单例(推荐)加锁的懒汉式单例方法1:返回普通指针方法2:返回智能指针 使用 C++11 std::call_once 实现的懒汉单例饿汉式单例

1. 什么是单例模式

单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性。

为什么需要单例模式

两个原因:

节省资源。一个类只有一个实例,不存在多份实例,节省资源。方便控制。在一些操作公共资源的场景时,避免了多个对象引起的复杂操作。

但是在实现单例模式时,需要考虑到线程安全的问题。

线程安全 什么是线程安全?

在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

如何保证线程安全? 给共享的资源加把锁,保证每个资源变量每时每刻至多被一个线程占用。让线程也拥有资源,不用去共享进程中的资源。如:使用threadlocal可以为每个线程维护一个私有的本地变量。 单例模式分类

单例模式可以分为 懒汉式 和 饿汉式 ,两者之间的区别在于创建实例的时间不同。

懒汉式

系统运行中,实例并不存在,只有当需要使用该实例时,才会去创建并使用实例。这种方式要考虑线程安全。

饿汉式

系统一运行,就初始化创建实例,当需要时,直接调用即可。这种方式本身就线程安全,没有多线程的线程安全问题。

单例类的特点 构造函数和析构函数为私有类型,目的是禁止外部构造和析构。拷贝构造函数和赋值构造函数是私有类型,目的是禁止外部拷贝和赋值,确保实例的唯一性。类中有一个获取实例的静态方法,可以全局访问。 2. 单例模式实现

单例的经典实现方式是「静态局部变量的懒汉单例」,推荐使用这种方式。

关于单例实现可以读下 stack overflow 上 这个回答 。

普通懒汉式单例(线程不安全)

这种情况是线程不安全的,不作详细介绍。

下面这几种实现都是线程安全的。

静态局部变量的懒汉单例(推荐)

这种方式在 C++11 下是线程安全的。这种单例实现方式称为 Meyer’s Singleton 。

头文件:

/// 内部静态变量的懒汉实现 // class Single { public: // 获取单实例对象 static Single& GetInstance(); // 打印实例地址 void Print(); private: // 禁止外部构造 Single(); // 禁止外部析构 ~Single(); // 禁止外部拷贝构造 Single(const Single &single) = delete; // 禁止外部赋值操作 const Single &operator=(const Single &single) = delete; };

源文件:

Single& Single::GetInstance() { /** * 局部静态特性的方式实现单实例。 * 静态局部变量只在当前函数内有效,其他函数无法访问。 * 静态局部变量只在第一次被调用的时候初始化,也存储在静态存储区,生命周期从第一次被初始化起至程序结束止。 */ static Single single; return single; } void Single::Print() { std::cout


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭