2013-02-01 14 views
1

可能重複:
When to use virtual destructors?當在一個C++應用程序中使用虛擬析構函數

When to use virtual destructors?

可能重複我在想,如果有人可以幫助我明白虛擬的需要析構函數。

我已經寫了一個主對話框的應用程序,並從這個主對話框中會產生其他派生對話框。

因此,所有這些派生的對話框是否需要虛擬析構函數?或只是主對話框?

如果你想把所有的析構函數中,你必須始終創建一個虛擬析構函數鏈被稱爲預先感謝您

+0

您可能想閱讀[本博客文章](http://blogs.msdn.com/b/oldnewthing/archive/2004/05/07/127826.aspx)。 –

回答

-1

。即使一個人是空的。

它錯過了在某個時候創建​​一個虛擬析構函數C++將創建一個非虛擬的,因此將打破所有的析構函數鏈。

對於非虛擬析構函數,它們將在您明確刪除的類指針上調用。如果你使用虛擬的 - 所有的鏈都會被調用。

-1

簡單的規則是「只要你有虛擬功能,你就需要一個虛擬析構函數。」

一旦你在一個基類虛擬中創建了一個函數,它將對所有的派生類變成虛擬的,無論你是否標記它。所以,如果你使主對話框析構函數變爲虛擬的,你已經完成了所有其他的工作[儘管我發現立即看到一個函數在查看類聲明時是虛擬的,並且不需要向上拖曳多層類找出是否是]。

1

當你要以多態方式使用這些對象時,需要虛擬析構函數。對於基類析構函數來說,這已經足夠了,它是virtual;派生的析構函數也將隱含地爲virtual

在你的情況下,它看起來並不像你將使用多態對話框,所以也許你根本不需要虛擬析構函數。

2

一般來說,如果一個類被設計爲用作基類,它應該有一個虛擬析構函數。唯一的例外是 便利課程,其提供諸如typedef(參見 示例std::exception)。對於這些最安全的解決方案 是爲了使析構函數受到保護,但實際上,它們的語義是這樣的,無論如何,從來沒有人創建一個指向它們的指針,所以這個問題在實踐中不會發生。

相關問題