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

1.析构函数

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

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

②无参数,无返回值。

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

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

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

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

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

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

2.拷贝构造函数

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

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

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

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

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

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

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

相关推荐
郝学胜-神的一滴1 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
智者知已应修善业1 小时前
【51单片机普通延时奇偶灯切换】2023-4-4
c语言·经验分享·笔记·嵌入式硬件·51单片机
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [block]bio
linux·笔记·学习
晚风(●•σ )2 小时前
C++语言程序设计——11 C语言风格输入/输出函数
c语言·开发语言·c++
9084869053 小时前
文旅业务相关前沿技术应用
学习·产品经理
恒者走天下3 小时前
秋招落定,拿到满意的offer,怎么提高自己实际的开发能力,更好的融入团队
c++
GIS学姐嘉欣3 小时前
地信、测绘、遥感等专业免费学习网站推荐
学习·gis开发·webgis
天若有情6733 小时前
【c++】手撸C++ Promise:从零实现通用异步回调组件,支持链式调用+异常安全
开发语言·前端·javascript·c++·promise
学困昇4 小时前
C++中的异常
android·java·c++
合作小小程序员小小店4 小时前
桌面安全开发,桌面二进制%恶意行为拦截查杀%系统安全开发3.0,基于c/c++语言,mfc,win32,ring3,dll,hook,inject,无数据库
c语言·开发语言·c++·安全·系统安全