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

default 和 delete 与默认构造函数 的使用

前言

使用default和delete关键字来干预编译器自动生成的函数。让我详细解释一下这些知识点:

正文

编译器生成的默认构造函数:

如果类A没有定义任何构造函数,那么编译器会自动生成一个无参的默认构造函数 A()。这个默认构造函数实际上是一个空操作,类似于一条return语句,它不执行任何实际的操作。
用户定义的构造函数:

如果类A定义了任何构造函数,无论是有参还是无参构造函数,编译器就不再自动生成默认的无参构造函数。这是因为如果你手动定义了构造函数,编译器默认假设你已经处理了对象的初始化。
编译器生成的复制构造函数:

如果类A没有定义带引用参数 A & 的复制构造函数 A(const A &a),那么编译器会自动生成一个复制构造函数,通常使用浅拷贝(逐成员复制)的方式实现。这个默认生成的复制构造函数会对对象的成员进行一一复制,但如果类A包含了指针等资源,这种默认的浅拷贝可能会导致问题。

使用default和delete关键字:

default关键字可以用来显式告诉编译器,你希望使用编译器生成的默认函数。例如,如果你定义了其他构造函数但仍希望保留默认构造函数,你可以这样写:A() = default;。这会告诉编译器生成一个默认构造函数。
delete关键字用来告诉编译器,你希望删除某个函数,使其不可用。例如,如果你不希望编译器生成默认的复制构造函数,你可以这样写:A(const A &a) = delete;。这会告诉编译器禁用该复制构造函数。
总之,使用default和delete关键字可以用来显式指定编译器生成或删除某个特殊成员函数,从而更精确地控制类的行为,以符合你的需求,同时防止不希望发生的隐式行为。

在这里插入图片描述
我们看向 problem :
( 1 ) 结果会正常,无参构造函数会被调用
( 2 ) 结果会正常,因为本身默认就会有这个构造函数
( 3 ) 报错,这个构造函数被我们删掉了

http://www.lryc.cn/news/172383.html

相关文章:

  • 【开发篇】一、热部署
  • 点云从入门到精通技术详解100篇-定子装配过程中基于深度学习的易变形材料的点云分割(下)
  • 谷歌浏览器关闭自动更新功能
  • 电商业务--技术负责人 250K*15
  • MySQL只同步单个表或多个表,非全部同步!
  • 【论文基本功】【LaTeX】个人常用易忘LaTeX命令
  • JVM参数调优——G1收集器
  • Linux cp命令使用指南:详细教程及实际应用场景解析
  • 树结构数据在table中回显 treeselect disabled
  • BOA服务器移植
  • 洛谷刷题入门篇:顺序结构
  • LVS+Haproxy
  • Linux知识
  • Java基础(三)
  • [Firefox/快捷键] 禁用Ctrl-W快捷键
  • Git常用命令diff和mv
  • 【谢希尔 计算机网络】第3章 数据链路层
  • 《DevOps实践指南》- 读书笔记(九)
  • 数据库数据恢复-SQL SERVER数据库分区被格式化的数据恢复方案
  • ubuntu安装ffmpeg
  • CentOS上安装Docker
  • 三相PWM整流器有限集模型预测电流控制MATLAB仿真模型
  • 【JavaEE】多线程(三)
  • 9.25day5---Qt
  • wpf制作自定义控件,并触发外部路由事件
  • axios全局路由拦截的设置方法
  • XSS跨站脚本攻击
  • Java8实战-总结33
  • Postman 的使用教程(详细)
  • 单元测试 —— JUnit 5 参数化测试