虛函數(shù)與純虛函數(shù) 析構(gòu)函數(shù)為什么是虛函數(shù)?
析構(gòu)函數(shù)為什么是虛函數(shù)?使用delete PA指向基類(lèi)引用時(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指向基類(lèi)引用時(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來(lái)確定它指向的函數(shù),這樣,如果B申請(qǐng)內(nèi)存資源,但不釋放析構(gòu)函數(shù)中的資源,就會(huì)導(dǎo)致內(nèi)存泄漏。
仔細(xì)想想,這不是虛擬功能的原因嗎?
添加了虛擬機(jī)制。編譯時(shí),虛擬機(jī)會(huì)自動(dòng)將方法指向B的地址,通過(guò)設(shè)置機(jī)制可以找到B的析構(gòu)函數(shù)。
為了改變這一點(diǎn),有一個(gè)虛擬析構(gòu)函數(shù)
只要基類(lèi)的析構(gòu)函數(shù)設(shè)置為virtual type,所有派生類(lèi)都會(huì)自動(dòng)將析構(gòu)函數(shù)設(shè)置為virtual type,以確保不會(huì)因?yàn)闆](méi)有調(diào)用析構(gòu)函數(shù)而導(dǎo)致內(nèi)存泄漏。
在c 中有沒(méi)有純虛構(gòu)造函數(shù)?在c 中純虛析構(gòu)函數(shù)的作用是什么?
有純虛擬功能,純虛擬破壞。我從沒(méi)聽(tīng)說(shuō)過(guò)純虛擬結(jié)構(gòu)。
虛函數(shù)是父類(lèi)的成員函數(shù),后跟虛函數(shù)
純虛函數(shù)是虛函數(shù),后跟A=0;(如果不想在虛函數(shù)中寫(xiě)入任何內(nèi)容,可以將其設(shè)為純虛)
虛析構(gòu)函數(shù),后跟虛析構(gòu)函數(shù),是純虛析構(gòu)函數(shù),后面是a=0。此外,還需要在類(lèi)外部編寫(xiě)一個(gè)空的析構(gòu)函數(shù)實(shí)現(xiàn)。
(我覺(jué)得純粹的虛擬解構(gòu)是無(wú)用的。人的純虛函數(shù)=0就是不用寫(xiě)就實(shí)現(xiàn)了。解構(gòu)是必要的。既然你必須解構(gòu),你就需要省去寫(xiě)作,然后在課外進(jìn)行一次空洞的解構(gòu)。何樂(lè)而不為
析構(gòu)函數(shù)用于釋放已定義對(duì)象中使用的指針。不需要調(diào)用默認(rèn)析構(gòu)函數(shù)。自建的析構(gòu)函數(shù)在程序結(jié)束時(shí)被調(diào)用。虛函數(shù)可以使成員函數(shù)的運(yùn)算泛化。當(dāng)基類(lèi)的指針指向不同派生類(lèi)的對(duì)象時(shí),如果基類(lèi)的指針調(diào)用其虛成員函數(shù),它將調(diào)用實(shí)際指向該對(duì)象的成員函數(shù),而不是基類(lèi)中定義的成員函數(shù)(只要派生類(lèi)更改成員函數(shù))。如果它不是虛函數(shù),則無(wú)論基類(lèi)指針指向哪個(gè)派生類(lèi)對(duì)象,都將調(diào)用在基類(lèi)中定義的函數(shù)。