这个问题我来回答一下。
首先明确一下析构函数的性质:析构函数是在对象销毁的时候调用的。
那么接下来分析一下这个代码:
1.如图1,第一个析构的是temp对象,是在调用Add函数后将temp对象销毁了,这个您已经知道啦。
图1 第一行执行结果
2.接下来我们看test1函数,在这个函数中您定义了两个对象p1和p3,这里需要注意,当test1函数执行完后,先销毁p3,后销毁p1,因为对象的管理是基于栈的,栈具有先入后出的特点。所以This is the end3 是p3的析构,This is the end2 是p1的析构(在Add函数中你将p1的数据成员c赋值成了2,见temp,c=2;语句)。
总结,这就是我的回答,总结知识点:1.析构函数是在对象销毁的时候执行的(可以了解一下作用域概念)。2.注意对象销毁的顺序(基于栈的)。
望您采纳!!!
从图里看析构函数确实调用过三次
This is the end0 //temp
This is the end3 //p3
This is the end2 //p1