C++析构函数
1.概念:通过前面构造函数的学习,我们知道一个对象是怎么来的,那么一个对象有事怎么没的呢?
析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作也是由编译器完成的,而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。
2.特性
析构函数是特殊的成员函数,其特征如下:
1.析构函数是在类前面加上字符~。
2.无参数无返回值类型
3.一个类只能有一个析构函数。若未显示定义,系统会自动生成默认的析构函数。注意:析构函数不能重载。
4.对象生命周期结束时,C++编译系统自动调用析构函数
5.编译器生成的默认析构函数,对自定义类型成员调用它的析构函数。
6.如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数。但是有资源申请时,一定要写,否则会造成资源泄露。
tips:构造函数是让你这个对象在创建时对那些成员进行初始化,析构函数则是对你拥有的这些初始化的对象进行毁灭处理。
C++拷贝构造函数
拷贝构造函数也是特殊的成员函数,有如下几个特征
1.拷贝构造函数是构造函数的一个重载形式
2.拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。
tips:注意在编译器生成默认的拷贝构造函数中,内置类型是按照字节方式直接实现的拷贝的,而自定义类型是调用其拷贝函数完成拷贝的
tips2:需要写析构函数的类,都需要写深拷贝的拷贝构造
不需要写析构函数的类,默认生成的浅拷贝的拷贝构造就可以用
运算符重载:
前面我们知道了函数的重载,这里我们又看到了运算符的重载,其实他的原理和函数的重载是一样的,有具体的函数名和其参数列表,其返回值类型和参数列表和普通的函数类似。
函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型operator操作符(参数列表)
注意:
不能通过链接其他符号来创建一个新的操作符:比如operator@
重载操作符必须要有一个类类型参数
用于内置类型的运算符,其含义不能改变,比如内置的整形+,不能改变其含义
作为类成员的函数重载时,其形参看起来比操作数数目少一,因为成员函数的第一个参数为隐藏的this。
.* :: sizeof ?: .注意以上五个运算符不能重载,这个在笔试选择题中经常出现