虚拟析构函数 - 必要时

时间:2016-11-16 16:22:27

标签: c++

假设我有一个只有一个虚函数的基类X.

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

我没有为X和Y提供显式的析构函数。

在本声明中销毁期间会发生什么。

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

哪会导致内存泄漏..

1 个答案:

答案 0 :(得分:0)

Y y;
X *x = &y;
return;

这里没有什么不好的事情发生。对象y在其范围的末尾被(完全)销毁。

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

如果你很幸运,这将导致内存泄漏 。行为未定义,意味着可能发生任何不良事件。

每当该类要作为其他类的基类时,通常都应该声明一个虚拟析构函数。

相关问题