《C++析构函数及其拷贝构造函数和运算符重载》

《C++析构函数及其拷贝构造函数和运算符重载》,第1张

C++析构函数

1.概念:通过前面构造函数的学习,我们知道一个对象是怎么来的,那么一个对象有事怎么没的呢?

  析构函数:与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作也是由编译器完成的,而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

2.特性

  析构函数是特殊的成员函数,其特征如下:

  1.析构函数是在类前面加上字符~。

  2.无参数无返回值类型

  3.一个类只能有一个析构函数。若未显示定义,系统会自动生成默认的析构函数。注意:析构函数不能重载。

  4.对象生命周期结束时,C++编译系统自动调用析构函数

  5.编译器生成的默认析构函数,对自定义类型成员调用它的析构函数。

  6.如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数。但是有资源申请时,一定要写,否则会造成资源泄露。

tips:构造函数是让你这个对象在创建时对那些成员进行初始化,析构函数则是对你拥有的这些初始化的对象进行毁灭处理。

C++拷贝构造函数

拷贝构造函数也是特殊的成员函数,有如下几个特征

1.拷贝构造函数是构造函数的一个重载形式

2.拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,因为会引发无穷递归调用。

tips:注意在编译器生成默认的拷贝构造函数中,内置类型是按照字节方式直接实现的拷贝的,而自定义类型是调用其拷贝函数完成拷贝的

tips2:需要写析构函数的类,都需要写深拷贝的拷贝构造

            不需要写析构函数的类,默认生成的浅拷贝的拷贝构造就可以用

运算符重载:

前面我们知道了函数的重载,这里我们又看到了运算符的重载,其实他的原理和函数的重载是一样的,有具体的函数名和其参数列表,其返回值类型和参数列表和普通的函数类似。

函数名字为:关键字operator后面接需要重载的运算符符号。

函数原型:返回值类型operator *** 作符(参数列表)

注意:

不能通过链接其他符号来创建一个新的 *** 作符:比如operator@

重载 *** 作符必须要有一个类类型参数

用于内置类型的运算符,其含义不能改变,比如内置的整形+,不能改变其含义

作为类成员的函数重载时,其形参看起来比 *** 作数数目少一,因为成员函数的第一个参数为隐藏的this。

.* :: sizeof ?:  .注意以上五个运算符不能重载,这个在笔试选择题中经常出现

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存