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

1.析构函数

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

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

②无参数,无返回值。

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

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

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

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

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

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

2.拷贝构造函数

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

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

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

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

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

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

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

相关推荐
雨落在了我的手上几秒前
如何学习java?
java·开发语言·学习
吃好睡好便好44 分钟前
汽车基本组成
学习·汽车
nnsix1 小时前
Unity 动画 Avatar 笔记
笔记·unity·游戏引擎
汉克老师1 小时前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
拾忆丶夜2 小时前
unity 热力图学习
学习·unity·游戏引擎
子兮曰2 小时前
whisper.cpp 深度解析:从边缘设备到实时语音识别
前端·c++·后端
特种加菲猫2 小时前
二叉搜索树:数据世界的“快速寻路指南”
开发语言·c++
naturerun2 小时前
从数组中删除元素的算法
数据结构·c++·算法
特种加菲猫2 小时前
STL关联容器:Set/Multiset与Map/Multimap详解
开发语言·c++
red_redemption2 小时前
自由学习记录(183)
学习·ue项目改名字的学问