MST

星途 面试题库

面试题:C++中虚析构函数在虚函数表中的位置及作用

在C++中,简述虚析构函数在虚函数表中的大概位置,并说明虚析构函数存在的意义是什么?如果一个类有虚析构函数,在对象销毁时,虚函数表起到怎样的作用?
11.1万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 虚析构函数在虚函数表中的位置
    • 在C++中,虚析构函数通常位于虚函数表的末尾。这是因为虚函数表是按照类中虚函数声明的顺序来排列的,析构函数一般是类中最后声明的特殊成员函数(虽然语法上没有强制顺序,但从习惯和逻辑角度通常如此),所以虚析构函数会处于虚函数表的末尾。
  2. 虚析构函数存在的意义
    • 多态析构:当通过基类指针删除派生类对象时,如果基类析构函数不是虚函数,那么只会调用基类的析构函数,而不会调用派生类的析构函数,这会导致派生类部分的资源无法正确释放,造成内存泄漏等问题。虚析构函数保证了在这种情况下,能够正确调用派生类的析构函数,进而再调用基类的析构函数,实现完整的对象销毁和资源释放。
  3. 对象销毁时虚函数表的作用
    • 当对象销毁时,如果类有虚析构函数,在通过基类指针删除派生类对象的场景下,虚函数表起到了确定实际要调用的析构函数的作用。运行时系统会根据虚函数表找到对应对象实际类型(即派生类类型)的虚析构函数地址,并调用该析构函数。先调用派生类的析构函数来清理派生类部分的成员变量和资源,然后再调用基类的析构函数清理基类部分的成员变量和资源,确保对象的完整销毁。