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

1.析构函数

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

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

②无参数,无返回值。

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

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

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

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

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

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

2.拷贝构造函数

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

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

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

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

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

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

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

相关推荐
aminghhhh1 分钟前
多模态融合【十九】——MRFS: Mutually Reinforcing Image Fusion and Segmentation
人工智能·深度学习·学习·计算机视觉·多模态
格林威3 分钟前
Baumer工业相机堡盟工业相机的工业视觉是否可以在室外可以做视觉检测项目
c++·人工智能·数码相机·计算机视觉·视觉检测
追烽少年x6 分钟前
C++11异步编程 --- async
c++
pedestrian_h34 分钟前
Spring AI 开发本地deepseek对话快速上手笔记
java·spring boot·笔记·llm·ollama·deepseek
&Cheems1 小时前
ZYNQ笔记(二十):Clocking Wizard 动态配置
笔记·fpga开发
努力毕业的小土博^_^1 小时前
【深度学习|学习笔记】 Generalized additive model广义可加模型(GAM)详解,附代码
人工智能·笔记·深度学习·神经网络·学习
怪小庄吖1 小时前
7系列 之 I/O标准和终端技术
经验分享·笔记·fpga开发·硬件架构·硬件工程·xilinx 7系列 fpga·i/o标准和终端技术
虾球xz1 小时前
游戏引擎学习第277天:稀疏实体系统
c++·学习·游戏引擎
小堃学编程1 小时前
前端学习(2)—— CSS详解与使用
前端·css·学习
想睡hhh1 小时前
c++进阶——哈希表的实现
开发语言·数据结构·c++·散列表·哈希