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類定義沒有什麼特別之處。我提到了這個聲明。第二個似乎導致內存泄漏 –