0

我有一個抽象的類,它定義了具體類的常見行爲。因此,將無法清理內存,因爲該類不能被實例化。不過,我知道你需要一個虛擬析構函數,以便派生的析構函數在靜態類型爲Base類時被調用。C++抽象類是否應該爲(虛擬)析構函數提供實現?

這是否意味着我應該總是爲一個抽象類聲明一個虛擬析構函數,但是將實現留空?

+1

你應該注意,析構函數與對象本身的內存分配無關。析構函數管理對象,而不是對象所在的空間。 –

回答

2

必須提供了一個類層次結構中每個析構函數的定義,因爲繼承圖上的所有析構函數在派生類被銷燬時都會被調用,即使某些析構函數是微不足道的。

通常,您可以通過將virtual ~Base() { }(或其中一些異常指定的變體)放入基類中來實現此目的。但是,如果析構函數是只有虛成員函數,你想使抽象基,可以使析構函數的純虛擬的,但你還是要定義它:

struct Base 
{ 
    virtual ~Base() = 0; 
}; 

Base::~Base() { } 
相關問題