是否需要定义虚拟析构函数?

bbl*_*coe 2 c++

是否需要将C ++析构函数定义为虚拟的?如果可以,为什么?我已经读到它们在将基类指针强制转换为派生类时必须确保正确清理。

Jac*_*ack 5

需要虚拟析构函数以允许将析构函数调用动态分派到层次结构树中的适当类。

在以下情况下:

Base *d = new Derived();
delete d;
Run Code Online (Sandbox Code Playgroud)

没有virtual析构函数,您将具有不确定的行为。这是因为编译器无法为其找到最专业的析构函数Derived,因为它没有声明为virtual