原文:C++中為什么要將析構函數定義成虛函數

構造函數不可以是虛函數的,這個很顯然,畢竟虛函數都對應一個虛函數表,虛函數表是存在對象內存空間的,如果構造函數是虛的,就需要一個虛函數表來調用,但是類還沒實例化沒有內存空間就沒有虛函數表,這根本就是個死循環。 可是析構函數卻要定義成虛函數,這是為什么呢,寫一個非常簡單的例子來理解一下: 輸出結果: 所以可以看出,派生類對象構造的時候先調用基類的構造函數再調用派生類的構造函數,析構的時候先調用派生類 ...

2016-08-03 17:06 0 5274 推薦指數:

查看詳情

析構函數為什么要定義函數

結論:   實現多態時,我們通過基類指針指向子類對象,在delete基類指針時,我們希望先調用子類的析構函數,再調用父類的析構函數,要實現這個目的,析構函數就必須定義函數,否則只會調用父類的析構函數,子類的析構函數不會被調用。 實驗1:析構函數定義函數 運行 ...

Tue Apr 27 03:59:00 CST 2021 0 233
C++基類的析構函數定義函數的原因

1:每個析構函數只會清理自己的成員(成員函數前沒有virtual)。2:可能是基類的指針指向派生類的對象,當析構一個指向派生類的成員的基類指針,這時程序不知道這么辦,可能會造成內存的泄露,因此此時基類的析構函數定義函數;基類指針可以指向派生類的對象(多態),如果刪除該指針delete[]p ...

Tue Feb 19 20:00:00 CST 2019 0 934
(轉)=========C++析構函數可以為純函數嗎?

轉載自:http://blog.csdn.net/yapian8/article/details/46418687 眾所周知,在實現多態的過程,一般將基類的析構函數設為virtual,以便在delete的時候能夠多態的鏈式調用。那么析構函數是否可以設為純呢? class CBase ...

Mon Jul 03 23:44:00 CST 2017 0 1220
[C++]析構函數的作用

轉載自: https://blog.csdn.net/derkampf/article/details/62093252 C++析構函數到底什么時候有用的,什么作用呢。 一.析構函數的作用 總的來說析構函數是為了避免內存泄露 ...

Thu Dec 27 19:30:00 CST 2018 1 1789
C++基類的析構函數為什么要用virtual析構函數

知識背景 要弄明白這個問題,首先要了解下C++的動態綁定。 關於動態綁定的講解,請參閱: C++的動態類型與動態綁定、函數、多態實現 正題 直接的講,C++基類采用virtual析構函數是為了防止內存泄漏。具體地說 ...

Wed Aug 31 18:32:00 CST 2016 1 33099
C++析構函數的作用

C++析構函數到底什么時候有用的,什么作用呢。 總的來說析構函數是為了避免內存泄露,而且是當子類中會有指針成員變量時才會使用得到的。也就說析構函數使得在刪除指向子類對象的基類指針時可以調用子類的析構函數達到釋放子類堆內存的目的,而防止內存泄露的。 兩段代碼: 運行 ...

Tue Jul 29 17:12:00 CST 2014 1 13637
C++析構函數

我知道,對於存在函數的基類,一般需要將基類的析構函數定義函數,從而實現資源的合理釋放,而且我也知道派生類在重載時,只需要清理自己的對象,不過,有時候還是會有些疑惑感,所以寫了一個簡單的例子,來消除疑惑。下面是實例內容: 下面是調用的地方的代碼: 這種情況下 ...

Wed May 02 18:29:00 CST 2018 0 4331
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM