C++设计模式探讨(2)-单例模式

server/2024/9/20 7:36:19/ 标签: c++, 设计模式, 单例模式
  • 介绍

这段介绍来自网络:

单例模式是一种创建型的软件设计模式,在工程项目中非常常见。通过单例模式的设计,使得创建的类在当前进程中只有一个实例,并提供一个全局性的访问点,这样可以规避因频繁创建对象而导致的内存飙升情况。

实现单例模式的三个要点:

1)私有化构造函数:这样外界就无法自由地创建类对象,进而阻止了多个实例的产生。

2)类定义中含有该类的唯一静态私有对象:静态变量存放在全局存储区,且是唯一的,供所有对象使用。

3)用公有的静态函数来获取该实例:提供了访问接口。

  •  分析

从以上介绍可见,单例模式主要为了节约内存,或者管理方便。但是有几个疑问:

1.类的对象创建后占用大量内存吗?如果是,我认为这似乎不合理。对象创建不应该涉及太多资源分配,除了一些栈内分配的成员变量或者对象。其他任何分配应该在后续通过调用对象的成员函数实现。

2.如果一个类对象确实需要在后续的行为中分配新的内存,如果非初始化阶段那么使用单例模式将是麻烦。所以,节约内存的说法似乎有点说不过去。

3.程序的大量位置使用静态私有对象,这可能会带来错乱。大量的在不同位置的对该静态对象的修改,访问,涉及逻辑的同步问题。似乎并不方便。

4.在多线程代码不适用调用单例模式的对象接口。

 

 


http://www.ppmy.cn/server/18024.html

相关文章

【产品经理修炼之道】- B端产品经理之业务系统设计

很多时候,业务系统建设好坏决定了企业的核心竞争力。作为产品经理,如何建设好业务系统这种OLTP类产品?本文从梳理业务流程、参与业务调研和设计业务系统三个步骤,教大家如何做好业务系统建设。 很多人都说设计B端产品最重要的是搞…

1.基于Springboot对SpringEvent初步封装

一:前置知识 Spring Event是Spring框架提供的一种事件机制,用于处理组件之间的通信。在复杂的系统中,模块或组件之间的通信是必不可少的。Spring Event可以用于以下场景: 1.系统间解耦:模块或组件之间通过事件进行通…

Django框架之python后端框架介绍

一、网络框架及MVC、MTV模型 1、网络框架 网络框架(Web framework)是一种软件框架,用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具,以简化开发过程并提高开发效率。网络框架通常包括以下功能…

鸿蒙应用开发-初见:入门知识、应用模型

基础知识 Stage模型应用程序包结构 开发并打包完成后的App的程序包结构如图 开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件,即HAP一个应用中的.hap文件合在一起称为一个Bundle,bundleName是应用的唯一标识 需要特别说明的是&…

《QT实用小工具·三十五》基于PathView,Qt/QML做的一个可以无限滚动的日历控件

1、概述 源码放在文章末尾 改项目实现了基于PathView,Qt/QML做的一个可以无限滚动的日历控件,下面是demo演示: 项目部分代码如下所示: import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4Bu…

被删除的照片和视频能找回吗?如何恢复手机删除的照片和视频?

手机里的照片和视频是我们记录生活的每一个瞬间,也是工作学习等场合经常用到的东西,一旦不慎丢失,将对我们造成很大损失。那么我们该如何恢复手机删除的照片和视频呢?通过掌握正确的恢复方法,能够最大程度地保护手机中…

mac配置maven

在 macOS 上配置 Maven 也相对简单。以下是一种常用的方法: 1. 安装maven **下载 Maven:**首先,你需要从 Maven 官网(https://maven.apache.org/download.cgi)下载最新版本的 Maven。你可以选择二进制压缩包&#xf…

黑马点评(十二) -- UV统计

一 . UV统计-HyperLogLog 首先我们搞懂两个概念: UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站,只记录1次。 PV:全称Page View&…

详解23种设计模式——单例模式

单例模式 | CoderMast编程桅杆单例模式 单例模式是最常用的设计模式之一,他可以保证在整个应用中,某个类只存在一个实例化对象,即全局使用到该类的只有一个对象,这种模式在需要限制某些类的实例数量时非常有用,通常全局…

新手Pytorch入门笔记-transforms.Compose()

我使用的图片是上图,直接下载即可 transforms.Compose 是PyTorch中的一个实用工具,用于创建一个包含多个数据变换操作的变换对象。这些变换操作通常用于数据预处理,例如图像数据的缩放、裁剪、旋转等。使用transforms.Compose 可以将多个数据…

PS学习笔记-抠图相关

选好颜色后,altdelete更换画布颜色、填充前景色 按住shift键自由缩放图片,调好后双击鼠标即可完成,或者点击工具栏的 对勾 在某图层下 CTRLT 变换图片,调好后双击鼠标即可完成,或者点击工具栏的 对勾 CTRLJ复制图…

揭秘快手互动神器:自动评论助力转化!

在这个信息爆炸的时代,每个内容创作者和企业都在寻找提升用户互动和转化的有效途径。无论是短视频、直播还是文章,如何让自己的内容脱颖而出,成为大家关注的焦点呢?今天,我们就要揭秘一款神奇的工具——快手自动评论软…

【代码随想录】day44

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、完全背包理论基础二、518零钱兑换 II三、377组合总和 Ⅳ总结 一、完全背包理论基础 完全背包:每个物品可以使用无数次。 二、518零钱兑换 II cla…

c#+unity基础

序列化: [SerializeField],点不出来,只能在面板上显示绑定游戏物体 //公有隐藏 特有函数 特有函数:不需要调用,自动执行 Awake最先执行->OnEable 面向对象思想 面向对象思想:分为具体对象和抽象对…

网站推广爬虫

网站推广爬虫是一种用于帮助网站推广的工具。它可以自动地收集和分析网站相关的数据,以便进行市场调研、竞争分析和优化策略等工作。以下是网站推广爬的一些常见功能和特点: .数据收集:网站推广爬虫可以通过抓取网页内容、提取关键信息和分析…

Docker② —— Cgroups详解

1. 概述 Cgroups 的全称是control groups,cgroups为每种可以控制的资源定义了一个子系统。Cgroups分为三个部分: cgroup 本身:对进程进行分组hierarchy:将 cgroup 形成树形结构subsystem:真正起到限制作用的部组件 cp…

DNS域名解析服务

在日常生活中人们习惯使用域名访问服务器,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。 1、DNS系统的…

【C++】模版进阶

目录 非类型模版参数 模版的特化 概念 函数模版特化 类模版特化 全特化 偏特化 模版分离编译 什么是分离编译 模版的分离编译 解决方法 模版总结 非类型模版参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在c…

Java基础:设计模式之原型模式

原型模式是一种创建型设计模式,它允许我们通过复制现有的对象来创建新的对象,而不是每次都通过构造函数新建。这种模式适用于那些创建新对象成本较高或者构造过程复杂的情况。在原型模式中,一个对象通过实现Cloneable接口并重写其clone()方法…

TypeError: Object of type Timestamp is not JSON serializable

在加载数据到 Kepler.gl 之前,将时间戳字段转换为字符串格式,这样就能成功生成并保存 Kepler.gl 动画地图了 from keplergl import KeplerGl import pandas as pd map KeplerGl()# 将时间戳字段转换为字符串格式 visualization_data["timestamp&q…