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

1.析构函数

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

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

②无参数,无返回值。

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

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

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

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

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

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

2.拷贝构造函数

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

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

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

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

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

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

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

相关推荐
一个人旅程~12 小时前
关于imac27inch因改短用户名导致混合硬盘和系统崩溃的问题分析与故障解决
经验分享·笔记·macos·新浪微博
十二12 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
心祭丫丫13 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
D e re k ZH14 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
派大猩猩_15 小时前
Obsidian 笔记怎么同步多端:Nutstore Sync 大笔记库同步测评
笔记·obsidian·obsidian插件·obsidian同步
Nerd(BUG版)16 小时前
Flutter学习day5--事件手势与命中测试
学习·flutter
zjxtxdy16 小时前
C++面向对象程序开发-类与对象
开发语言·c++
Nerd(BUG版)17 小时前
KMP学习day4--Kotlin空安全与泛型
学习·安全·kotlin
東隅已逝,桑榆非晚17 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
qq_4069810318 小时前
c++拷贝构造函数
开发语言·c++