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