簡體   English   中英

C ++抽象類應該為(虛擬)析構函數提供實現嗎?

[英]C++ Should an abstract class provide implementation for a (virtual) destructor?

我有一個抽象的類,它定義了具體類的常見行為。 因此,沒有內存可以清理,因為類無法實例化。 但是,我知道你需要一個虛擬析構函數,以便在它們的靜態類型是Base類時調用派生的析構函數。

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

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

通常,您可以通過在基類中放置virtual ~Base() { } (或其中一些異常指定的變體)來實現此目的。 但是,如果析構函數是唯一的虛擬成員函數,並且您想要使基本抽象,則可以使析構函數為純虛擬,但您仍需要定義它:

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

Base::~Base() { }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM