0
假设我有一个基类X只有一个虚拟函数。虚拟析构函数 - 有需要时
我将它扩展为Y并覆盖该函数。
我没有X和Y.
这个说法遭到破坏时会发生什么情况提供明确的析构函数。
Y y;
X *x= &y;
return;
.
.
.
X*x = new Y;
delete x;
return;
这将导致内存泄漏..
假设我有一个基类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;
这将导致内存泄漏如果你是幸运。行为是不确定的,意味着任何不好的事情都可能发生。
无论何时该类打算成为其他类的基类,都声明一个虚拟析构函数通常是个好主意。
都不是?另外我不明白这两个代码片断是如何与虚拟析构函数相关的?您至少需要显示类定义。 – UnholySheep
1)没问题。 x只是一个指针,但是y被破坏并且从超类中释放所有资源。 2)Y的资源迷失了,因为只有X的析构函数在内存中的Y实例上调用 - >可能的内存泄漏(或更糟糕的情况)。 – Youka
@UnholySheep类定义没有什么特别之处。我提到了这个声明。第二个似乎导致内存泄漏 –