2012-09-08 105 views
1

可能重複:
Do I need to explicitly call the base virtual destructor?當調用子類的析構函數時,父類的析構函數是否也會被調用?

比方說你具備以下條件:

class ParentClass { 
    ... 
    virtual ~ParentClass(); 

class ChildClass { 
    ... 
    virtual ~ChildClass(); 

哪個析構函數會被調用?父母和孩子的析構函數都會被調用嗎?目前沒有在我的電腦上設置C++編譯器。

+1

讓我來向您介紹http://liveworkspace.org/。如果您需要這些編譯器或輸入的其他語言或較早版本,http://ideone.com對此非常有用。 – chris

+0

有趣的是,我剛回到我在有效C++中遺漏的地方,發現它在頁面的頂部:*析構函數的工作方式是首先調用大多數派生類的析構函數,然後每個基類 類的析構函數是叫。* – chris

回答

3

如果ChildClassParentClass派生,則派生的析構函數首先被調用,然後是父類。在代碼中,ChildClass不繼承ParentClass

1

是的,這兩個構造函數都是調用的:構造函數和銷燬函數是對稱的:所有的子對象都以與創建它們相反的順序被銷燬。對於銷燬順序來說,析構函數是否是虛擬的並不重要。虛擬析構函數與非虛擬析構函數的唯一影響是當使用指向基址的指針創建dreived類型的對象時:如果基類的析構函數不是虛擬的,則會導致未定義的行爲。

相關問題