面试题答案
一键面试obj2
的析构函数调用时刻:- 当
obj2
所在的内层代码块结束时调用。原因是obj2
的作用域仅限于内层代码块,当程序执行离开该代码块时,obj2
的生命周期结束,此时会自动调用其析构函数,输出“Destructor called”。
- 当
obj1
的析构函数调用时刻:- 在
main
函数结束时调用。因为obj1
的作用域是整个main
函数,当main
函数执行完毕,即将返回时,obj1
的生命周期结束,所以会调用其析构函数,输出“Destructor called”。
- 在
obj3
的析构函数调用时刻:- 同样在
main
函数结束时调用。obj3
的作用域也是整个main
函数,在main
函数返回前,obj3
的生命周期结束,自动调用其析构函数,输出“Destructor called”。 - 调用顺序是先
obj3
,再obj1
(按照声明的反序调用析构函数)。因为obj3
后声明,所以先析构。
- 同样在