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

学习笔记(C++篇)--- Day 3

1.析构函数

析构函数不是完成对对象本身的销毁,C++规定对象在销毁时会自动调用析构函数,完成对象中资源的清理释放工作。(严格说,Date是不要析构函数的)

特点:

①析构函数名是在类名钱加上字符~

②无参数,无返回值。

③一个类只能有一个析构函数。若未显示定义,系统会自动生成默认的析构函数。

④对象生命周期结束后,系统会自动调用析构函数。

⑤跟构造函数类似,我们不写编译器自动生成的析构函数对内置类型成员不做处理,自定类型成员会调用他的析构函数。

⑥还需要注意的是我们显示写析构函数,对于自定义类型成员也会调用他的析构,也就是说自定义类型成员无论什么情况都会自动调用析构函数。

⑦如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,如Date;如果默认生成的析构就可以用,也就不需要显示写析构,如MyQueue;但是有资源申请时,一定要自己写析构,否则会造成资源泄漏,如Stack。

⑧一个局部域的多个对象,C++规定后定义的先析构。

 2.拷贝构造函数

如果一个构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是一个特殊的构造函数。

特点:   

①拷贝构造函数是构造函数的一个重载。 

②拷贝构造函数的第一个参数必须是类类型对象的引用(C++规定类类型传值传参必须调用拷贝构造)

③C++规定自定义类型对象进行拷贝行为必须调用拷贝构造,所以这里自定义类型传值传参和传值返回都会调用拷贝构造完成。

④若未显式定义拷贝构造,编译器会生成自动生成拷贝构造函数。自动生成的拷贝构造对内置类型成员变量会完成值拷贝/浅拷贝(一个字节一个字节的拷贝),对自定义类型成员变量会调用他的拷贝构造。(类似栈等的需要进行的是深拷贝)

⑤像Date这样的类成员变量全是内置类型且没有指向什么资源,不需要实现拷贝构造;一个小技巧——如果一个类显示实现了析构并释放资源,那么他就是需要显示写拷贝构造,否则就不需要。

⑥传值返回会产生一个临时对象调用拷贝构造,传引用返回,返回的是返回对象的别名,没有产生拷贝。(传引用返回可以减少拷贝,但是一定要确保返回对象,在当前函数结束后还在,才能用引用返回)

 

http://www.xdnf.cn/news/925.html

相关文章:

  • 掌握Go空接口强大用途与隐藏陷阱
  • 14.QT-多元素控件|QListWidget|QTableWidget|QTreeWidget(C++)
  • SpringBoot整合JWT Token:构建安全无状态认证体系的最佳实践
  • QGraphicsItem的shape和boundingRect方法
  • HarmonyOS:Navigation实现导航之页面设置和路由操作
  • 【 Git 全局忽略文件完全指南:配置、规则与最佳实践】
  • 电商数据自动化采集方案:淘宝商品详情 API 接入与数据处理技巧
  • Spring(第一章)
  • 基于LangChain4J的AI Services实践:用声明式接口重构LLM应用开发
  • 基于陀螺仪的智能防抖平台设计与实现:从硬件到算法的全流程解析
  • 基于Springboot的自习室预约系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • MongoDB数据库的安装到入门使用详细讲解
  • [PTA]2025CCCC-GPLT天梯赛 现代战争
  • 红宝书第五十五讲:文档生成(JSDoc vs ESDoc):像写笔记一样自动生成说明书
  • UDP协议详解
  • STP原理与配置以及广播风暴实验STP实验
  • 【论文速递】2025年06周 (Robotics/Embodied AI/LLM)
  • RK3588芯片NPU的使用:PPOCRv4例子在安卓系统部署
  • 2025高频面试算法总结篇【其他】
  • 《Java面试通关宝典:基础篇》——Java面试题系列(持续更新)
  • LabVIEW 开发中数据滤波方式的选择
  • 【C++】模板2.0
  • GitHub 趋势日报 (2025年04月20日)
  • Unity-微信截图功能简单复刻-04修改纹理
  • 上海共荣应用营养研究所SAT-3D膳食诊断:从5岁到60岁,你的饮食习惯决定寿命长短
  • 24.中医知识问答删除历史对话功能前端代码实现
  • 搭建哨兵架构
  • 读文献先读图:火山图怎么看?
  • SATA——PHY层状态机
  • 工作记录7