ad

《C++程序开发案例课堂》_了解C++的更好途径_11.2 析构函数清除类对象

admin 159 2023-11-01

【摘要】 本书摘自《C++程序开发案例课堂》一书中第11章,第2节,由刘春茂、李琪编著。

11.2 析构函数清除类对象

在 C++ 中,构造函数是为了初始化对象的,与构造函数相反, C++ 中还定义了析构函数 的概念。当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

析构函数不返回任何值,没有函数类型,也没有函数参数,因此它不能被重载。 一个类可以有多个构造函数,但只能有一个析构函数。

《C++程序开发案例课堂》_了解C++的更好途径_11.2 析构函数清除类对象

11.2.1 析构函数的概念

析构函数是另外一个在类中比较特殊的函数,它可以理解成为反向的构造函数。调用的 时机与构造函数相反,它是在对象被撤销的时候调用。析构函数的命名规则就是在类名的前 面加一个“~”符号,它的主要作用就是在此对象撤销的时候释放所占用的资源。

在建立一个类的对象时,首先调用构造函数,对这个对象进行初始化。当这个对象的生 命周期结束的时候,则调用析构函数。

例如,定义了一个类,在该类的构造函数中申请了内存空间,在对该类实例操作过程中 应用内存空间进行操作,那么在该类的析构函数中,就要释放该内存空间。析构函数和构造 函数相互呼应,完成内存空间的申请和释放。

那么,在什么情况下才需要释放对象呢?

(1)使用运算符new 分配的对象被 delete 删除。

(2)一个具有块作用域的本地(自动)对象超出其作用域。

(3)临时对象的生存期结束。

(4)程序结束运行。

(5)使用完全限定名显示调用对象的析构函数。 在定义析构函数时,需要注意以下几个方面。

(1)析构函数不能带有参数。

(2)析构函数不能有任何返回值。

(3)在析构函数中不能使用 return 语句。

(4)析构函数不能定义为 const、volatile或 static。

11.2.2 析构函数的调用

析构函数的作用是由其执行时间决定的,其作用往往是为了善后事宜,因为它是在对象 结束时调用的。例如,在对象结束时,释放构造函数定义的内存空间。

11.3 默认构造函数

在 C++ 的类中必须有一个构造函数,这个构造函数可以是 C++ 自身提供的一个默认的构 造函数,也可以是程序员自己定义的构造函数。如果是使用 C++提供的默认函数,该函数不 带任何参数,只是创建一个对象,并不会对类中的数据成员进行赋值操作。

如果不想使用默认的构造函数,就需要我们自己定义一个构造函数。只要显式地定义了 构造函数,那么C++ 就不会再提供默认的构造函数了。

在 C++ 中,并不是在一个类中没有定义构造函数,就一定会有一个默认的构造函数,只 有在下面4种情况下, C++ 才会构造一个默认的构造函数。

(1)在一个类中,带有含有默认构造函数的成员类,才会自动生成一个构造函数。

(2)一个类继承于带有默认构造函数的基类。

(3)类中带有虚函数会生成默认构造函数。

(4)带有虚基类的类会生成默认构造函数。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《C++程序开发案例课堂》_了解C++的更好途径_1.2.2 C++Builder
下一篇:《C++程序开发案例课堂》_了解C++的更好途径_12.1 什么是运算符重载
相关文章
×