2012-08-01 80 views
1

delegate模式是否很好使destuctor虛擬?代表應該有一個虛擬析構函數嗎?

class MyClass 
{ 
    ... 
}; 

class MyClassDelegate 
{ 
    ... 
}; 

一方面類MyClassDelegate是一個接口,應該是從繼承,但在另一方面,它不是通過MyClassDelegate指針

你認爲應該deletesubclass

回答

5

你可以考慮將它保護爲非虛擬的 - 那麼你實際上是強制執行和記錄你不能使用這種指針刪除一個對象的事實。可以找到更多的討論here

0

如果已經具有其他虛擬函數,則析構函數幾乎不會引起開銷。

+0

我明白,但問題是關於設計,而不是性能 – Andrew 2012-08-01 07:48:13

0

如果您打算讓類繼承自MyClassDelegate,最好給它一個虛擬析構函數。

在您的初始設計中,您可能無法計劃到delete指向MyClassDelegate的任何指針,但是此設計將會發展,您的選擇將對此演變發展施加約束。這個特定的約束很容易被遺忘,而結果可能需要一段時間才能診斷出來的崩潰(或細微的錯誤)。

相關問題