MST

星途 面试题库

面试题:C++类析构函数自动调用的常见触发条件场景分析

假设有如下C++代码:class MyClass { public: ~MyClass() { std::cout << "Destructor called" << std::endl; } }; int main() { MyClass obj1; { MyClass obj2; } MyClass obj3; return 0; } 请分析在程序执行过程中,析构函数分别在哪些时刻自动被调用,并说明原因。
32.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

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