C/C++編程筆記:詳細(xì)講解丨析構(gòu)函數(shù)
什么是析構(gòu)函數(shù)?
析構(gòu)函數(shù)是一個(gè)破壞或刪除對(duì)象的成員函數(shù)。

句法:
~constructor-name();
析構(gòu)函數(shù)的屬性:
銷(xiāo)毀對(duì)象時(shí),將自動(dòng)調(diào)用析構(gòu)函數(shù)。
不能將其聲明為static或const。
析構(gòu)函數(shù)沒(méi)有參數(shù)。
它沒(méi)有返回類(lèi)型,甚至沒(méi)有空。
具有析構(gòu)函數(shù)的類(lèi)的對(duì)象不能成為聯(lián)合的成員。
析構(gòu)函數(shù)應(yīng)在該類(lèi)的公共部分中聲明。
程序員無(wú)法訪問(wèn)析構(gòu)函數(shù)的地址。
什么時(shí)候調(diào)用析構(gòu)函數(shù)?
當(dāng)對(duì)象超出范圍時(shí),將自動(dòng)調(diào)用析構(gòu)函數(shù):?
(1)函數(shù)結(jié)束?
(2)程序結(jié)束?
(3)包含局部變量的塊結(jié)束?
(4)調(diào)用刪除運(yùn)算符??
析構(gòu)函數(shù)與普通成員函數(shù)有何不同?
析構(gòu)函數(shù)與以波浪號(hào)(?)開(kāi)頭的類(lèi)具有相同的名稱(chēng)。?析構(gòu)函數(shù)不接受任何參數(shù),也不返回任何值
一個(gè)類(lèi)中可以有多個(gè)析構(gòu)函數(shù)嗎?
不可以,一個(gè)類(lèi)中只有一個(gè)析構(gòu)函數(shù),其類(lèi)名前面帶有?,沒(méi)有參數(shù),也沒(méi)有返回類(lèi)型。
什么時(shí)候需要編寫(xiě)用戶定義的析構(gòu)函數(shù)?
如果我們不在類(lèi)中編寫(xiě)自己的析構(gòu)函數(shù),則編譯器會(huì)為我們創(chuàng)建一個(gè)默認(rèn)的析構(gòu)函數(shù)。除非我們?cè)陬?lèi)中動(dòng)態(tài)分配了內(nèi)存或指針,否則默認(rèn)析構(gòu)函數(shù)可以正常工作。當(dāng)一個(gè)類(lèi)包含指向在該類(lèi)中分配的內(nèi)存的指針時(shí),我們應(yīng)該編寫(xiě)一個(gè)析構(gòu)函數(shù)以釋放該類(lèi)實(shí)例之前的內(nèi)存。必須這樣做以避免內(nèi)存泄漏。
析構(gòu)函數(shù)可以是虛擬的嗎?
是的,實(shí)際上,當(dāng)我們具有虛函數(shù)時(shí),在基類(lèi)中使析構(gòu)函數(shù)虛擬是一個(gè)好主意。
以上就是今天的全部?jī)?nèi)容了。每日分享小知識(shí),希望對(duì)你有幫助~
另外如果你想更好的提升你的編程能力,學(xué)好C語(yǔ)言C++編程!彎道超車(chē),快人一步!筆者這里或許可以幫到你~
微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地
分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門(mén)教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
