首页 理论教育C++程序设计基础教程:析构函数调用

C++程序设计基础教程:析构函数调用

【摘要】:析构函数被系统自动调用分两种情况。分析以下程序的执行结果。解:本程序执行结果如下:调用带参构造函数矩形s1的面积=153调用无参构造函数矩形s2的面积=0调用了析构函数!

析构函数被系统自动调用分两种情况。

1.用类直接建立对象

在程序执行过程中,当遇到对象的生存期结束时,系统自动调用析构函数,然后回收为对象所分配的存储空间。

【例2.11】分析以下程序的执行结果。

解:本程序执行结果如下:

调用带参构造函数

矩形s1的面积=153

调用无参构造函数

矩形s2的面积=0

调用了析构函数!

调用了析构函数!(www.chuimin.cn)

在上述程序执行过程中,对象s1、s2在主函数main()结束遇到后括号时,自动调用析构函数,因此输出结果中有两个“调用了析构函数!”。

2.用new动态创建对象

对于用new运算符动态创建的对象,在产生对象时调用构造函数,只有用delete释放对象时,才调用析构函数。若不使用delete运算符来删除动态生成的对象,程序结束时对象仍存在,并占用相应的存储空间,即系统不能自动删除动态创建的对象。

【例2.12】分析以下程序的执行结果。

解:本程序的执行结果如下:

First point=>(12,6)

Second point=>(5,12)

调用析构函数.

调用析构函数.

从程序的执行结果看到,对于类对象,系统会自动释放它并自动调用析构函数,程序中的对象a就是这样的。对于用new运算符创建的对象,必须在使用delete运算符释放时才调用析构函数。程序中的对象指针p使用delete释放,故调用析构函数,否则,不会调用析构函数。