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

c++关键字 =delete和=default

在C++的类中,有四类特殊的成员函数① 默认构造函数;② 拷贝构造函数;③ 拷贝赋值函数(operator=);④ 析构函数;它们控制着类的实例的创建、初始化、拷贝以及销毁。

(1)默认构造函数:如果对构造函数进行了重载,则编译器不会隐式的生成一个默认的构造函数,此时如果调用了默认构造函数会在编译时报错,为了避免这种情况,一般会选择重写默认构造函数,且函数体为空。关键字 =default 优化了这种行为,用该关键字标记重写的默认拷贝构造函数,编译器会隐式生成一个版本,在代码更加简洁的同时,编译器隐式生成的版本的执行效率更高

class Mine 
{
public:// 重载构造函数,此时不会隐式生成默认构造函数 Mine(int num) {}// 可选择重写默认构造函数 Mine() {}// 关键字 =default 标记编译器隐式生成该类的默认构造函数,// 代码更简洁,且隐式生成的版本执行效率更高 Mine() = default;
};int main()
{// 调用默认构造函数 Mine ob; // 调用默认拷贝构造函数 Mine pOb(ob);  // 需要特别注意的是:因为tOb是在创建时被赋值的,// 所以此处的赋值操作符调用的是默认拷贝构造函数 Mine tOb = pOb;Mine sOb;// 在构造完成之后,赋值操作符执行的就是赋值运算了,// 所以此时调用的就是拷贝赋值函数 sOb = tOb;/** 离开作用域时自动调用默认的析构函数  */return 0;
}

(2)拷贝构造函数 和 拷贝赋值函数:不论有没有对它们进行重载,编译器始终会隐式生成默认版本,但有的时候不希望类实例进行拷贝构造或拷贝赋值,此时可以重写它们并将权限设置为private,但这样只是利用语法特性来碰巧实现效果,且对友元会带来困惑。可以使用关键字 =delete 标记不想被类实例调用的拷贝构造和拷贝赋值,相当于删除了它们

class Mine
{
public:// 保证重载了构造函数后,编译器会隐式生成一个默认版本 Mine() = default;Mine(Mine& ob) = delete;Mine& operator=(Mine& ob) = delete;
};int main()
{Mine ob// 编译错误,调用的拷贝构造函数已删除 Mine pOb(ob);// 编译错误,调用的拷贝构造函数已删除 Mine tOb = pOb;Mine sOb;// 编译错误,调用的拷贝赋值函数已删除 sOb = tOb;return 0;
}

(3)析构函数:一个类中有且仅有一个析构函数(所以=delete不能用于析构函数),它是一个无参无返回值不能被重载的特殊成员函数,由系统自动调用,析构函数如果被重写,则系统会调用重写的版本,否则调用隐式生成的默认版本:

class Mine
{
public:~Mine() {} // 显示定义,相当于重写,若没有,则调用编译器默认生成的版本 ~Mine(int) {} // 编译错误,析构函数不允许被重载 ~Mine() = delete; // 编译错误,类仅有一个析构函数,删除了析构怎么销毁对象 
};

相关文章:

c++关键字 =delete和=default

在C的类中,有四类特殊的成员函数:① 默认构造函数;② 拷贝构造函数;③ 拷贝赋值函数(operator);④ 析构函数;它们控制着类的实例的创建、初始化、拷贝以及销毁。 (1&…...

idea 左下角的Git(Version Control)中显示Local Changes窗口

打开Local Changes窗口来查看当前Git仓库的本地变更。 使用快捷键: - Windows: Alt9 - Mac: Cmd9 解决: (1)idea打开settings (2)点击Version Control窗口选项卡,选择Commit选项,对 Use.... in…...

.net老项目中Jquery访问webservice

.net老项目中Jquery访问webservice 1. xml类型返回 jQuery.ajax({type: "POST",async: false,url: "WebService/Evection.asmx/GetCheckUpApplyEForm",contentType: "application/json",data: "{lngEvectionID:" eformSNOriginal &…...

SpringBoot项目集成ElasticSearch服务

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍优势说明集成过程1.引入依赖2.添加配置文件3.初始化 示例说明代码结果 总结提升 版本介绍 Spring boot的版本是: 2.3.12   ElasticSearch的版本是:7.6.2 背景介绍 在我们的项目中经常会遇到对于…...

2023年网络安全比赛--综合渗透测试(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.扫描目标靶机将靶机开放的所有端口,当作flag提交(例:21,22,23); 2.扫描目标靶机将靶机的http服务版本信息当作flag提交(例:apache 2.3.4); 3.靶机网站存在目录遍历漏洞,请将…...

一次网络不通“争吵“引发的思考

作者: 郑明泉、余凯 为啥争吵,吵什么? “你到底在说什么啊,我K8s的ecs节点要访问clb的地址不通和本地网卡有什么关系…” 气愤语气都从电话那头传了过来,这时电话两端都沉默了。过了好一会传来地铁小姐姐甜美的播报声…...

【使用Node.js搭建自己的HTTP服务器】

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…...

回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-RF粒子群优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)效果…...

● 392.判断子序列 ● 115.不同的子序列

● 392.判断子序列 class Solution { public:bool isSubsequence(string s, string t) {int len1s.size(),len2t.size();int res0;vector<vector<int>>dp(s.size()1,vector<int>(t.size()1,false));for(int i1;i<s.size();i){for(int j1;j<len2;j){if(…...

4.SpringCloud 基本架构

1.SpringCloud概述 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff0c;一次性令牌&#xff0c;全局锁&#xff0c;…...

springboot后端返回图片,vue前端接收并显示的解决方案

后端图片数据返回 后端通过二进制流的形式&#xff0c;写入response中 controller层 /*** 获取签到二维码*/GetMapping("/sign-up-pict")public void signUpPict(Long id, Long semId, HttpServletResponse response) throws NoSuchAlgorithmException {signUpServ…...

算法|Day46 动态规划14

LeetCode 1143- 最长公共子序列 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述&#xff1a;给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff…...

宠物小程序开发攻略:五分钟教你打造宠物店小程序

随着互联网技术的发展和智能手机的普及&#xff0c;小程序成为了各行各业的新宠。宠物服务行业也不例外&#xff0c;宠物店通过搭建小程序&#xff0c;可以实现线上线下的结合&#xff0c;提供更便捷的服务和更优质的用户体验。那么&#xff0c;宠物服务小程序的制作流程是怎样…...

open suse 15.5(任意版本) 使用阿里云的repo

一、shell suse 的包管理工具叫 zypper. zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/oss/ openSUSE-15.5-Oss zypper addrepo -f http://mirrors.aliyun.com/opensuse/distribution/leap/15.5/repo/non-oss/ openSUSE-15.5-Non-Oss …...

第一篇:编写 Hello World 程序

编写 Hello World 程序 Hello World 程序就是让应用程序显示 Hello World 字符串。这是最简单的应用&#xff0c;但却包含了一个应用程序的基本要素&#xff0c;所以一般使用它来演示程序的创建过程。本章要讲的就是在Qt Creator 中创建一个图形用户界面的项目&#xff0c;从而…...

python 打印沁园春 雪 居中对齐 文本对齐

以下是python 中使用 DebugInfo 模块居中对齐打印《沁园春・雪》的效果 引入模块 pip install DebugInfopython代码 # -*- coding:UTF-8 -*-# region 引入必要依赖 from DebugInfo.DebugInfo import * # endregion诗文 沁园春 雪 作者: 毛主席 北国风光&#xff0c;千里冰封…...

在 IDEA 中使用 Git开发 图文教程

在 IDEA 中使用 Git开发 图文教程 一、连接远程仓库二、IDEA利用Git进行开发操作三、分支操作3.1 新建分支3.2 切换分支3.3 删除分支3.4 比较分支3.5 合并分支 四、常用快捷键 一、连接远程仓库 一、打开IDEA&#xff0c;进入目录&#xff1a;File ->New ->Project from…...

NodeJs导出PDF

&#xff08;优于别人&#xff0c;并不高贵&#xff0c;真正的高贵应该是优于过去的自己。——海明威&#xff09; 场景 根据订单参数生成账单PDF 结果 示例代码 /* eslint-disable no-unused-vars */ /* eslint-disable no-undef */ /* eslint-disable complexity */ const…...

内核编译机制

inux内核的编译主要过程&#xff1a;配置、编译、安装。 配置主要由Kconfig提供图形界面完成 编译主要基于Kbuild编译系统&#xff0c;执行make完成编译 安装主要也是基于Kbuild提供的脚本&#xff0c;然后执行make完成安装 Kconfig Kconfig用于内核的配置&#xff0c;mak…...

机器人TF坐标系变换与一些可视化工具的应用

TF坐标在ROS中是一个非常重要的概念&#xff0c;因为机器人在做日常操作任务的时候&#xff0c;对于其所在位置和朝向是需要时刻知道的&#xff0c;而机器人是由很多节点组成的协同任务&#xff0c;对于每个部件&#xff0c;我们需要知道它的位姿(位置和朝向)&#xff0c;这使得…...

ARM RAS架构:错误记录与注入机制详解

1. ARM RAS架构概述在现代计算系统中&#xff0c;可靠性、可用性和可服务性(Reliability, Availability, and Serviceability, RAS)已成为关键设计指标。ARM架构通过一系列硬件机制实现这些特性&#xff0c;其中错误记录与注入机制是核心组成部分。这套机制允许系统检测、记录硬…...

为什么 Promise 比 setTimeout 先执行?——JavaScript 事件循环与异步顺序完全指南

为什么 Promise 比 setTimeout 先执行&#xff1f;——JavaScript 事件循环与异步顺序完全指南 这是 JavaScript 异步中最经典也最容易困惑的问题之一。核心答案是&#xff1a; Promise 的回调属于 Microtask&#xff08;微任务&#xff09;&#xff0c;setTimeout 属于 Macro…...

示波器平均值功能实战:从噪声中精准提取电机故障信号

1. 项目概述&#xff1a;用示波器诊断模型火车电机故障作为一名在电子工程领域摸爬滚打了十几年的老工程师&#xff0c;我手边最离不开的工具&#xff0c;除了万用表&#xff0c;就是示波器。很多人觉得示波器是研发实验室里的高端设备&#xff0c;离日常维修很远&#xff0c;但…...

成都道路救援电话选择哪家

在成都这座繁华的都市中&#xff0c;车辆行驶难免会遇到突发状况&#xff0c;如机械故障、爆胎、电瓶亏电或交通事故。当困境来临时&#xff0c;一个可靠的道路救援电话显得尤为关键。随着汽车保有量的攀升&#xff0c;成都救援服务市场也日益成熟&#xff0c;但如何从众多选择…...

Claude集成Spring Boot全链路实践:从零搭建智能API网关的7步标准化流程

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude集成Spring Boot全链路实践&#xff1a;从零搭建智能API网关的7步标准化流程 环境准备与依赖声明 确保 JDK 17、Maven 3.8 和 Spring Boot 3.2.x 基础环境就绪。在 pom.xml 中引入 Claude 官方…...

Harbor:统一管理MCP服务器,告别AI助手配置混乱

1. 项目概述&#xff1a;Harbor&#xff0c;一个管理MCP服务器的统一中心如果你和我一样&#xff0c;在日常开发中深度依赖Claude、Cursor这类AI编程助手&#xff0c;那你一定对MCP&#xff08;Model Context Protocol&#xff09;服务器不陌生。简单来说&#xff0c;MCP服务器…...

IGH-1.6.2-创龙RK3506-RT-----8-----my_master.c讲解【应用层PDO读写】

本文解决三个应用层问题: 第一,如何从 TxPDO 里读取 3 个 KEY。 第二,如何向 RxPDO 写入 5 个 LED。 第三,如何新增一个 UINT8 数据 PDO。 当前工程里的过程数据指针是 domain_pd,它是应用层读写 PDO 的基础。LED 和 KEY 的字节偏移、bit 位置,都是前面注册 PDO entry …...

ARM MPMC内存控制器架构与优化策略

1. ARM MPMC内存控制器架构解析在嵌入式系统设计中&#xff0c;内存控制器作为处理器与存储设备之间的桥梁&#xff0c;其性能直接影响整个系统的运行效率。ARM PrimeCell多端口内存控制器(MPMC)是一种高度可配置的IP核&#xff0c;支持与多种类型存储设备的连接&#xff0c;包…...

终极NDS游戏资源编辑器Tinke:免费开源工具轻松提取和修改任天堂DS游戏文件

终极NDS游戏资源编辑器Tinke&#xff1a;免费开源工具轻松提取和修改任天堂DS游戏文件 【免费下载链接】tinke Viewer and editor for files of NDS games 项目地址: https://gitcode.com/gh_mirrors/ti/tinke 你是否曾经好奇任天堂DS游戏内部包含了哪些精美的图像、动听…...

Docker Compose 镜像检测脚本(支持自动扫描 + 手动输入 YAML)

在日常运维中&#xff0c;经常会遇到这样一个问题&#xff1a; docker-compose 文件里定义了很多镜像&#xff0c;但本地是否已经存在不清楚 如果一个个 docker pull 或 docker images 去对比&#xff0c;会非常低效。 因此我们可以写一个脚本&#xff0c;自动解析 docker-com…...