列表生成式python 析構(gòu)函數(shù)與構(gòu)造函數(shù)的區(qū)別是什么呢?
析構(gòu)函數(shù)與構(gòu)造函數(shù)的區(qū)別是什么呢?1. 不同的概念:析構(gòu)函數(shù):當(dāng)對象的函數(shù)被調(diào)用時,系統(tǒng)將自動執(zhí)行析構(gòu)函數(shù)。構(gòu)造函數(shù):一種特殊的方法。特別是,一個類可以有多個構(gòu)造函數(shù),這些構(gòu)造函數(shù)可以根據(jù)其參數(shù)的數(shù)量
析構(gòu)函數(shù)與構(gòu)造函數(shù)的區(qū)別是什么呢?
1. 不同的概念:析構(gòu)函數(shù):當(dāng)對象的函數(shù)被調(diào)用時,系統(tǒng)將自動執(zhí)行析構(gòu)函數(shù)。構(gòu)造函數(shù):一種特殊的方法。特別是,一個類可以有多個構(gòu)造函數(shù),這些構(gòu)造函數(shù)可以根據(jù)其參數(shù)的數(shù)量或參數(shù)的類型來區(qū)分。2不同的函數(shù):析構(gòu)函數(shù):調(diào)用析構(gòu)函數(shù)。構(gòu)造函數(shù):將初始值賦給對象成員變量。三。不同用途:析構(gòu)函數(shù):“清理”工作構(gòu)造函數(shù):主要用于創(chuàng)建對象時初始化對象,即為對象成員變量指定初始值。它總是與new操作符一起用于對象創(chuàng)建語句。
析構(gòu)函數(shù)為什么是虛函數(shù)?
使用delete PA指向基類引用時,釋放PA引用的內(nèi)存,PA引用B object,為什么不調(diào)用B的析構(gòu)函數(shù)呢?這里,由于是靜態(tài)綁定,當(dāng)B在編譯時確定了它指向的函數(shù)時,它不會根據(jù)對象a來確定它指向的函數(shù),這樣,如果B申請內(nèi)存資源,但不釋放析構(gòu)函數(shù)中的資源,就會導(dǎo)致內(nèi)存泄漏。
仔細(xì)想想,這不是虛擬功能的原因嗎?
添加了虛擬機(jī)制。編譯時,虛擬機(jī)會自動將方法指向B的地址,通過設(shè)置機(jī)制可以找到B的析構(gòu)函數(shù)。
為了改變這一點,有一個虛擬析構(gòu)函數(shù)
只要基類的析構(gòu)函數(shù)設(shè)置為virtual type,所有派生類都會自動將析構(gòu)函數(shù)設(shè)置為virtual type,以確保不會因為沒有調(diào)用析構(gòu)函數(shù)而導(dǎo)致內(nèi)存泄漏。