关于C++的特殊类定制
特殊类定制
在C++中,一些特殊性质的类如何设计
类禁止拷贝的对象
- C++11 使用delete关键字赋值给拷贝构造和赋值
- C++98将拷贝构造和赋值声明在私有里
类只能在堆上创建的对象
- 将构造函数私有化, 提供一个获取对象堆上创建对象的公有函数
- 将析构函数私有化, 提供一个释放资源公有函数
类只能在栈上创建的对象
- 将构造函数私有化, 并提供一个获取栈上创建的对象的公有函数
然后将operator new函数禁用掉, 但是无法防拷贝(有一定缺陷)
不能被继承的类
- C++98将父类构造函数私有化
- C++11使用final关键字修饰父类
单例模式
一个类只能创建一个对象的类(singleton)
即只有唯一的实例对象
-
饿汉模式: 无论是否使用, 程序创建之前(main函数之前)就构造一个唯一的对象
- 先将构造函数私有化
- 使用私有的一个静态的、对应类型的实例化对象成员, 在类内声明, 类外初始化
- 提供一个静态成员函数获取到该对象
- 优点: 简单, 无线程安全问题
- 缺点
- 单例模式多可能会导致进程的启动慢
- 一个程序中, 有多个单例时, 无法控制其初始化的顺序
-
懒汉模式: 第一次使用对象时再创建实例对象
-
设计方式同饿汉基本相同, 但调用静态成员函数时(需要获取实例对象时)再创建实例对象(new 实例对象)
-
优点对应着饿汉的缺点
- 可以控制多个单例的初始化顺序
- 不影响启动顺序
-
缺点
-
线程安全问题
- 需要通过对应加锁, 以及双重判断进行保护
static ThreadPool<T> *getIntance(int num = g_thread_num){// 双重判断, 减少反复的加锁和解锁操作(因为只有第一次调用该方法时才会有线程安全问题, 之后都不会)// 加多一个判断, 后续再来的线程时, 则不需要再进行加解锁, 只用做一次判断即可(拦截了大量的无用的访问锁的行为->只有第一次访问锁有意义)if (pool == nullptr){LockGuard lock(&_smtx);if (pool == nullptr){pool = new ThreadPool<T>(num);}}return pool; }
-
-
-
单例对象的释放问题
- 一般情况下, 单例对象在整个程序运行期间都需要使用, 所以一般都是不释放的
单例对象在进程结束后也会进行资源释放 - 一些特殊场景需要释放, 如单例对象析构时, 需要进行一些持久化操作(往文件或者数据库写)
构建一个内嵌的垃圾回收类, 然后声明一个全局的垃圾回收对象, 当单例对象生命周期到时, 则会自动析构该垃圾对象, 同时释放单例对象资源
- 一般情况下, 单例对象在整个程序运行期间都需要使用, 所以一般都是不释放的
相关文章:
关于C++的特殊类定制
特殊类定制 在C中,一些特殊性质的类如何设计 类禁止拷贝的对象 C11 使用delete关键字赋值给拷贝构造和赋值C98将拷贝构造和赋值声明在私有里 类只能在堆上创建的对象 将构造函数私有化, 提供一个获取对象堆上创建对象的公有函数将析构函数私有化, 提供一个释放…...
Linux备份脚本
作用 Linux文件备份的作用较多,推荐以下几种: 保护文件:备份可以帮助用户保护文件,防止文件被意外删除或损坏。保证系统安全和应用安全:Linux系统管理人员对系统和业务应用要有一个合理的备份恢复策略,完…...
【Unity】实现轮盘抽奖
简介 示例一:使用协程完成轮盘转动 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lunpan : MonoBehaviour {[Tooltip("轮盘节点")]public Transform Roulette;[Tooltip("轮盘旋转的…...
面下对象之overload与override
简介 在面向对象编程中,重载(overloading)和重写(overriding)是两个不同的概念。 重载(Overloading)的定义 重载是同一个类中定义多个同名方法,但是这些方法具有不同的参数列表(参数个数、参数类型或参数顺序不同)。 当调用这个方法时,编译器会根据实际传入的参数自动选择对…...
大数据之Hive函数大全
🔧 Hive函数大全 更多大数据学习资料请关注公众号“大数据领航员"免费领取 一、数学函数 1、取整函数: round 1.函数描述 返回值语法结构功能描述doubleround(double a)返回double类型的整数值部分(遵循四舍五入) 2.例程 hive>…...
宝塔下应该用 Memcached 还是 Redis?
明月最近在跟几个使用宝塔面板的客户运维的时候发现不少站长不知道如何选择 Memcached 和 Redis,甚至都说不清楚 Memcached 或者 Redis 具体是用来干啥的?甚至还碰到过一个站长 Memcached 和 Redis 都安装了,但一个都没有用,就那么…...
恢复视频3个攻略:从不同情况下的恢复方法到实践!
随着科技的进步,我们的生活被各种各样的数字内容所包围,其中,视频因其独特的记录性质,承载着许多重要的资料。但不管是自媒体人还是普通人日常生活随手一拍,都会遇到误删视频的情况。为了帮助您找回手机视频࿰…...
从git上拉取项目进行操作
1.Git的概念 Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。它实现多人协作的机制是利用clone命令将项目从远程库拉取到本地库,做完相应的操作后再利用push命令从本地库将项目提交至远程库。 2.Git的工作流程…...
ES升级--01--环境准备和安装
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Linux 单机1.官网下载 Elasticsearchhttps://www.elastic.co/cn/downloads/past-releases/#elasticsearch 2.解压软件3.创建用户设置用户 es 密码 es赋权ES用户数据…...
Linux 防火墙 firewalld 常用命令
1 防火墙 - firewalld 1.1 开启防火墙 # 临时性开启,服务器重启后会恢复为原来的状态 systemctl start firewalld # 永久性开启(即开机启动),重启服务器后生效 systemctl enable firewalld1.2 关闭防火墙 # 临时性关闭…...
时间|基于SprinBoot+vue的时间管理系统(源码+数据库+文档)
时间管理系统 目录 基于SprinBootvue的时间管理系统 一、前言 二、系统设计 三、系统功能设计 1管理员功能模块 2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农…...
C++青少年简明教程:for循环语句
C青少年简明教程:for循环语句 C的for循环语句是一种迭代控制语句,用于重复执行一段代码。 语法格式: for(表达式1;表达式2;表达式3) 循环体 for循环语句执行流程图: 不太好理解,请看下图&am…...
自动驾驶技术现状与需求分析
随着科技的不断进步和智能化浪潮的席卷,自动驾驶技术已成为当今交通领域的热点话题。本文旨在深入探讨自动驾驶技术的当前发展状况,并对其未来的市场需求进行细致分析。首先,我们将回顾自动驾驶技术的起源、发展历程以及当前的技术水平&#…...
SQL生成自然数,日历序列 浅析
01.sqlserver版本 使用sqlserver将数据复制n条 selectt.indx,t.name,tmp.vlue from (values(1,苹果) ) as t(indx, name) ,(select[number] as vluefrom master.dbo.spt_valueswhere [type] pand [number] between 1 and 10 ) as tmpspt_values是什么 spt_values是SQL Se…...
【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树
文章目录 0. 概述1. 无前缀冲突编码2. 编码成本3. 带权编码成本4. 编码算法5. 算法实现流程6. 时间复杂度与改进方案 0. 概述 学习Huffman树。 1. 无前缀冲突编码 在加载到信道上之前,信息被转换为二进制形式的过程称作编码(encoding)&…...
arcgisPro将一个图层的要素复制到另一个图层
1、打开两个图层,如下,其中一个图层中有两个要素,需要将其中一个要素复制到另一个图层中,展示如下: 2、选中待复制要素,点击复制按钮,如下: 3、下拉粘贴按钮列表,选择【选…...
难兄难弟——Java中 goto 与 const关键字
目录 简洁版: 详解版: 一:goto 二:const 简洁版: 1: 在Java中,goto也是一个关键字,但是取消了goto的使用,使用循环标记进行代替; 2:在Java中&a…...
如何优化大文件读取时的性能
1、分块读取 1、不要一次性将整个文件加载到内存中,而是将其分割成多个较小的块(例如,每块1MB或更大),然后逐块读取和处理。 2、使用FileInputStream和BufferedInputStream来分块读取文件。 2、使用缓冲区 1、使用…...
【机器学习】Chameleon多模态模型探究
Chameleon:引领多模态模型的新时代 一、多模态模型的时代背景二、Chameleon模型的介绍三、Chameleon模型的技术特点四、Chameleon模型的性能评估五、Chameleon模型的代码实例 随着人工智能技术的深入发展,我们逐渐认识到单一模态的模型在处理复杂问题时存…...
cv2.imdecode 和 cv2.imread 的区别
cv2.imdecode 和 cv2.imread 都是 OpenCV 用于读取图像的函数,但它们用于不同的场景,处理方式也不同。 cv2.imread 用法: img cv2.imread(image_path)功能: cv2.imread 用于直接从文件系统中读取图像文件。image_path 是图像文件…...
10大好用WMS系统盘点!2026年企业WMS系统选型实战指南
在2026年企业数字化转型的浪潮中,WMS系统(仓储管理系统)已经成为提升供应链效率的核心工具。面对市面上琳琅满目的WMS系统,企业如何进行精准的WMS系统选型,成为了管理者面临的一大难题。为了帮助大家避坑,本…...
Perplexity财经数据查询失效的4个致命信号,第3个95%用户仍在踩坑——附权威校验脚本(Python版)
更多请点击: https://kaifayun.com 第一章:Perplexity财经数据查询失效的4个致命信号,第3个95%用户仍在踩坑——附权威校验脚本(Python版) 信号一:HTTP状态码非200但响应体含“success”: true Perplexit…...
【懒人专用】Windows 端 Open Claw v 2.7.5 全自动部署图文教程
📌 前言 2026 年开源圈热门的「数字员工」OpenClaw(昵称小龙虾),GitHub 星标突破 28 万,凭借本地运行 零代码操作 自动干活的核心优势广受关注!很多人误以为它是普通聊天 AI,实则是能真正操控…...
别再乱接线了!12V手电钻保护板(B+/B-/B1/B2)保姆级接线图解,附万用表检测电池坏点技巧
12V手电钻保护板接线全攻略:从原理到实战的安全操作指南 面对手电钻保护板上密密麻麻的接线端子,即使是经验丰富的DIY爱好者也难免感到困惑。B、B-、B1、B2这些看似简单的标记背后,实际上隐藏着锂电池组安全工作的关键机制。本文将带您深入理…...
一线大厂AI开发笔记本清单(万元内)
人机协作,AI模型:Deepseek仅供参考一线大厂AI开发笔记本清单(万元内)机型CPUGPU(显存)内存SSD散热Linux兼容性风险等级性能星级参考价华硕 天选7 Pro 酷睿版Ultra 9 290HX Plus (24核)RTX 5070 (8GB)32GB1T…...
告别SAP GUI!Notepad++配置ABAP语法高亮,离线查看代码更高效
告别SAP GUI!Notepad配置ABAP语法高亮,离线查看代码更高效 对于ABAP开发者而言,代码阅读和分析是日常工作中不可或缺的部分。然而,传统的SAP GUI环境并非总是最便捷的选择——无论是通勤途中、客户现场无系统访问权限,…...
别再傻傻分不清了!给硬件工程师的SI、PI、EMI关系速查手册(附高频PCB设计实例)
硬件工程师实战指南:SI、PI、EMI的三角关系与高频PCB设计避坑 当你第一次面对DDR4布线导致的EMI测试失败时,可能会陷入这样的困惑:明明是信号完整性问题,为什么整改方案却是调整电源层的去耦电容?这种看似跨领域的因果…...
启动我进入数据科学的那一个思维方式转变
原文:towardsdatascience.com/the-one-mindset-change-that-launched-me-into-data-science-3f72bd1df46f?sourcecollection_archive---------2-----------------------#2024-10-19 让它成为现实:微小的改变帮助你进入数据科学或任何梦想职业 https://…...
Midscene.js实战指南:3步构建跨平台AI自动化测试,效率提升70%
Midscene.js实战指南:3步构建跨平台AI自动化测试,效率提升70% 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 在当今多平台应用生态中&am…...
华为昇腾PTO指令集优化SSA架构Gather操作
华为昇腾的PTO(Pipeline Tensor Operations)指令集通过其异构流水线、内存层次优化和软硬件协同设计,为优化亚二次注意力(SSA)架构中的不规则Gather(聚集)操作提供了系统性的解决方案。这些优化…...
