C++ 面试题 目录

C++ 中什么是虚析构函数 (virtual destructor)?为什么需要它?

推荐答案

在C++中,虚析构函数(virtual destructor)是一个声明为virtual的析构函数。它的主要作用是确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数,从而避免资源泄漏。

示例代码

-- -------------------- ---- -------
----- ---- -
-------
    ------- ------- -
        -- ------
    -
--

----- ------- - ------ ---- -
-------
    ---------- -------- -
        -- -------
    -
--

--- ------ -
    ----- --- - --- ----------
    ------ ----  -- ------------
    ------ --
-

本题详细解读

什么是虚析构函数?

虚析构函数是一个在基类中声明为virtual的析构函数。它的存在是为了确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数。

为什么需要虚析构函数?

在C++中,如果一个类可能被继承,并且可能会通过基类指针来删除派生类对象,那么基类的析构函数应该声明为虚函数。如果不这样做,当通过基类指针删除派生类对象时,只会调用基类的析构函数,而不会调用派生类的析构函数,从而导致派生类中的资源无法正确释放,引发资源泄漏。

虚析构函数的工作原理

当析构函数被声明为虚函数时,C++会为类生成一个虚函数表(vtable),其中包含指向虚析构函数的指针。当通过基类指针删除派生类对象时,编译器会根据虚函数表找到正确的析构函数并调用它,从而确保派生类的析构函数被正确执行。

何时使用虚析构函数?

  • 当一个类被设计为基类,并且可能会被继承时。
  • 当可能会通过基类指针删除派生类对象时。

注意事项

  • 如果一个类不会被继承,或者不会通过基类指针删除派生类对象,那么不需要将析构函数声明为虚函数。
  • 虚析构函数会增加类的内存开销,因为它需要维护虚函数表。
纠错
反馈