簡體   English   中英

關於純虛擬析構函數的問題

[英]Question about pure virtual destructor

如果我們定義一個具有純虛擬析構函數的抽象類,為什么我們必須在抽象類中給出一個析構函數的定義?

在銷毀對象時必須調用基類的析構函數,因此需要定義。

因為標准是這樣說的:

12.4.7可以將析構函數聲明為虛擬(10.3)或純虛擬(10.4); 如果在程序中創建了該類的任何對象或任何派生類,則應定義析構函數。

這樣做的原因是,當派生類的對象被破壞時會顯式調用它。

另請參見我先前的問題的答案: 在什么情況下提供純虛函數的實現有利?

正如Jesse指出的那樣,繼承的析構函數總是被調用(編譯器為您調用它們,而沒有任何方法可以覆蓋此行為),因此可以推斷出虛擬析構函數必須具有一個實現。 因此,如果純虛擬析構函數必須具有實現,那么純虛擬析構函數和常規虛擬析構函數之間有什么區別? 如果您的抽象類僅聲明了虛擬析構函數,而沒有其他純虛方法,則將析構函數設為純析將阻止某人實例化抽象類。

只能將虛擬dtor聲明為純Dtor。 但是,由於添加了聲明,因此必須實現dtor的主體。 如前所述,析構函數將它們的父dtor稱為繼承鏈。

暫無
暫無

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

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