虚析构函数——必要时

Virtual destructor - when it is necessary

本文关键字:析构函数      更新时间:2023-10-16

假设我有一个基类X,它只有一个虚函数。

我将它扩展到Y并覆盖该函数。

我没有为X和y提供显式析构函数

语句的销毁过程中发生了什么。

Y y;
X *x= &y;
return;
.
.
.
X*x = new Y;
delete x;
return;
Y y;
X *x = &y;
return;

这里没发生什么坏事。对象y在其作用域结束时被(完全)销毁。

X*x = new Y;
delete x;
return;

如果幸运的话,这会导致内存泄漏。该行为是未定义的,这意味着任何不好的事情都可能发生。

当一个类打算成为其他类的基类时,声明虚析构函数通常是一个好主意。