0
我有一個抽象的類,它定義了具體類的常見行爲。因此,將無法清理內存,因爲該類不能被實例化。不過,我知道你需要一個虛擬析構函數,以便派生的析構函數在靜態類型爲Base類時被調用。C++抽象類是否應該爲(虛擬)析構函數提供實現?
這是否意味着我應該總是爲一個抽象類聲明一個虛擬析構函數,但是將實現留空?
我有一個抽象的類,它定義了具體類的常見行爲。因此,將無法清理內存,因爲該類不能被實例化。不過,我知道你需要一個虛擬析構函數,以便派生的析構函數在靜態類型爲Base類時被調用。C++抽象類是否應該爲(虛擬)析構函數提供實現?
這是否意味着我應該總是爲一個抽象類聲明一個虛擬析構函數,但是將實現留空?
您必須提供了一個類層次結構中每個析構函數的定義,因爲繼承圖上的所有析構函數在派生類被銷燬時都會被調用,即使某些析構函數是微不足道的。
通常,您可以通過將virtual ~Base() { }
(或其中一些異常指定的變體)放入基類中來實現此目的。但是,如果析構函數是只有虛成員函數,你想使抽象基,可以使析構函數的純虛擬的,但你還是要定義它:
struct Base
{
virtual ~Base() = 0;
};
Base::~Base() { }
你應該注意,析構函數與對象本身的內存分配無關。析構函數管理對象,而不是對象所在的空間。 –