MST

星途 面试题库

面试题:C++中关于子类析构调用父类析构的基础分析

请写一个C++程序,包含一个父类和一个子类,在子类析构函数中手动调用父类析构函数。并解释在什么情况下,即使不手动调用,父类析构函数也会被自动调用。
13.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class Parent {
public:
    ~Parent() {
        std::cout << "Parent destructor called." << std::endl;
    }
};

class Child : public Parent {
public:
    ~Child() {
        // 手动调用父类析构函数
        Parent::~Parent(); 
        std::cout << "Child destructor called." << std::endl;
    }
};

父类析构函数自动调用情况

  1. 正常对象生命周期结束:当一个子类对象正常离开其作用域时,编译器会自动调用子类的析构函数,并且在子类析构函数执行完毕后,会自动调用父类的析构函数。例如:
int main() {
    Child c;
    return 0;
}

在上述代码中,Child 对象 c 离开 main 函数作用域时,先调用 Child 的析构函数,然后自动调用 Parent 的析构函数。 2. 使用 delete 释放动态分配的对象:当使用 new 运算符动态分配一个子类对象,并使用 delete 释放时,同样会先调用子类析构函数,再自动调用父类析构函数。例如:

int main() {
    Child* c = new Child();
    delete c;
    return 0;
}

在这种情况下,delete c 会先调用 Child 的析构函数,然后自动调用 Parent 的析构函数。