MST

星途 面试题库

面试题:C++虚析构函数与内存释放

假设你有一个基类`Base`和一个派生类`Derived`,`Base`类的析构函数是虚函数,在`Derived`类的析构函数中,除了释放`Derived`类自身分配的资源外,还需要做什么操作来确保内存正确释放?如果`Base`类的析构函数不是虚函数,会出现什么问题?请详细分析内存释放过程及可能产生的内存泄漏情况。
17.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. Base类的析构函数是虚函数时
    • Derived类的析构函数中,除了释放Derived类自身分配的资源外,不需要额外做特殊操作来确保内存正确释放。因为当Base类的析构函数是虚函数时,通过Base类指针或引用删除Derived类对象时,会先调用Derived类的析构函数,然后再调用Base类的析构函数,这样就能保证Derived类和Base类分配的资源都能正确释放。
  2. Base类的析构函数不是虚函数时
    • 内存释放过程:如果通过Base类指针或引用删除Derived类对象,只会调用Base类的析构函数,而不会调用Derived类的析构函数。
    • 可能产生的内存泄漏情况:因为Derived类的析构函数未被调用,Derived类自身分配的资源就无法得到释放,从而导致内存泄漏。例如,Derived类中可能有动态分配的数组或其他资源,如果其析构函数未执行,这些资源就会一直占用内存,无法被回收,造成内存泄漏。