【摘要】:析构函数被系统自动调用分两种情况。分析以下程序的执行结果。解:本程序执行结果如下:调用带参构造函数矩形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释放,故调用析构函数,否则,不会调用析构函数。
相关推荐