2016-11-16 85 views
0

假设我有一个基类X只有一个虚拟函数。虚拟析构函数 - 有需要时

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

我没有X和Y.

这个说法遭到破坏时会发生什么情况提供明确的析构函数。

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

这将导致内存泄漏..

+0

都不是?另外我不明白这两个代码片断是如何与虚拟析构函数相关的?您至少需要显示类定义。 – UnholySheep

+0

1)没问题。 x只是一个指针,但是y被破坏并且从超类中释放所有资源。 2)Y的资源迷失了,因为只有X的析构函数在内存中的Y实例上调用 - >可能的内存泄漏(或更糟糕的情况)。 – Youka

+0

@UnholySheep类定义没有什么特别之处。我提到了这个声明。第二个似乎导致内存泄漏 –

回答

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

什么也没有发生在这里。对象y在其范围的末尾被完全销毁。

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

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

无论何时该类打算成为其他类的基类,都声明一个虚拟析构函数通常是个好主意。

相关问题