析構(gòu)函數(shù)為什么是虛函數(shù) 析構(gòu)函數(shù)為什么是虛函數(shù)?
析構(gòu)函數(shù)為什么是虛函數(shù)?使用delete PA指向基類引用時(shí),釋放PA引用的內(nèi)存,PA引用B object,為什么不調(diào)用B的析構(gòu)函數(shù)呢?這里,由于是靜態(tài)綁定,當(dāng)B在編譯時(shí)確定了它指向的函數(shù)時(shí),它不會(huì)根
析構(gòu)函數(shù)為什么是虛函數(shù)?
使用delete PA指向基類引用時(shí),釋放PA引用的內(nèi)存,PA引用B object,為什么不調(diào)用B的析構(gòu)函數(shù)呢?這里,由于是靜態(tài)綁定,當(dāng)B在編譯時(shí)確定了它指向的函數(shù)時(shí),它不會(huì)根據(jù)對(duì)象a來確定它指向的函數(shù),這樣,如果B申請(qǐng)內(nèi)存資源,但不釋放析構(gòu)函數(shù)中的資源,就會(huì)導(dǎo)致內(nèi)存泄漏。
仔細(xì)想想,這不是虛擬功能的原因嗎?
添加了虛擬機(jī)制。編譯時(shí),虛擬機(jī)會(huì)自動(dòng)將方法指向B的地址,通過設(shè)置機(jī)制可以找到B的析構(gòu)函數(shù)。
為了改變這一點(diǎn),有一個(gè)虛擬析構(gòu)函數(shù)
只要基類的析構(gòu)函數(shù)設(shè)置為virtual type,所有派生類都會(huì)自動(dòng)將析構(gòu)函數(shù)設(shè)置為virtual type,以確保不會(huì)因?yàn)闆]有調(diào)用析構(gòu)函數(shù)而導(dǎo)致內(nèi)存泄漏。
析構(gòu)函數(shù)和虛函數(shù)的用法及作用?
析構(gòu)函數(shù)用于釋放已定義對(duì)象中使用的指針。不需要調(diào)用默認(rèn)的析構(gòu)函數(shù),而需要在程序結(jié)束時(shí)調(diào)用自建的析構(gòu)函數(shù)。虛函數(shù)可以使成員函數(shù)的運(yùn)算泛化。當(dāng)基類的指針指向不同派生類的對(duì)象時(shí),如果基類的指針調(diào)用其虛成員函數(shù),它將調(diào)用實(shí)際指向該對(duì)象的成員函數(shù),而不是基類中定義的成員函數(shù)(只要派生類更改成員函數(shù))。如果它不是虛函數(shù),則無論基類指針指向哪個(gè)派生類對(duì)象,都將調(diào)用在基類中定義的函數(shù)。
一個(gè)類里可以有幾個(gè)析構(gòu)函數(shù)?
只能定義一個(gè)析構(gòu)函數(shù)。如果太多,編譯器不知道調(diào)用哪一個(gè)。
1。虛析構(gòu)函數(shù)和析構(gòu)函數(shù)在函數(shù)上是相同的。因此,除了動(dòng)態(tài)綁定之外,其他屬性與析構(gòu)函數(shù)類似。
2. 析構(gòu)函數(shù)與構(gòu)造函數(shù)的名稱相同,但它前面必須有波浪號(hào)(~)
3。析構(gòu)函數(shù)沒有參數(shù),沒有返回值,不能重載。因此,一個(gè)類中只能有一個(gè)析構(gòu)函數(shù)。當(dāng)對(duì)象被撤消時(shí),編譯器將自動(dòng)調(diào)用析構(gòu)函數(shù)。
析構(gòu)函數(shù)與構(gòu)造函數(shù)有什么區(qū)別?
構(gòu)造函數(shù)僅用于初始化值,但在實(shí)例化對(duì)象時(shí),可以通過實(shí)例將參數(shù)從主函數(shù)傳遞給其他函數(shù),以便其他函數(shù)具有值。
規(guī)則,只要你實(shí)例化一個(gè)對(duì)象,系統(tǒng)就會(huì)自動(dòng)用構(gòu)造函數(shù)回調(diào),也就是說,如果你不寫,編譯器會(huì)自動(dòng)調(diào)用它一次。析構(gòu)函數(shù)的作用與構(gòu)造函數(shù)相反。用于撤消對(duì)象的某些特殊任務(wù)。它可以釋放對(duì)象分配的內(nèi)存空間。特點(diǎn):析構(gòu)函數(shù)與構(gòu)造函數(shù)同名,但函數(shù)前面有~。析構(gòu)函數(shù)沒有參數(shù)和返回值,不能重載。一個(gè)類中只能有一個(gè)析構(gòu)函數(shù)。撤消對(duì)象時(shí),編譯器還會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)。每個(gè)類必須有一個(gè)析構(gòu)函數(shù)。用戶可以自定義析構(gòu)函數(shù),或者編譯器可以自動(dòng)生成默認(rèn)析構(gòu)函數(shù)。一般析構(gòu)函數(shù)定義為類的公共成員。