C++構(gòu)造函數(shù)和析構(gòu)函數(shù)(詳解版)

構(gòu)造函數(shù):它在創(chuàng)建類對(duì)象時(shí)會(huì)自動(dòng)被調(diào)用,用于構(gòu)造類對(duì)象。如果程序員沒有編寫構(gòu)造函數(shù),則c++會(huì)自動(dòng)提供一個(gè),當(dāng)然程序員在創(chuàng)建類時(shí)通常會(huì)編寫自己的構(gòu)造函數(shù)。
構(gòu)造函數(shù)名稱必須與他所屬類的名稱相同,構(gòu)造函數(shù)不允許有返回類型。DEMO::DEMO()

析構(gòu)函數(shù)什么時(shí)候加virtual?
首先virtual用于類的多態(tài),當(dāng)設(shè)計(jì)一個(gè)類,用做其他類的父類時(shí),且有virtual修飾的方法,這些方法可被子類覆蓋定義,此時(shí)的析構(gòu)函數(shù)必須加virtual。原因如下:上述場(chǎng)景一般使用工廠設(shè)計(jì)模式,定義一個(gè)父類的指針,指向子類的對(duì)象,而在delete父類指針時(shí),期望釋放對(duì)象。但父類析構(gòu)函數(shù)不加virtual修飾,則只會(huì)調(diào)用父類析構(gòu)函數(shù),而不調(diào)用子類析構(gòu)函數(shù),導(dǎo)致無法釋放子類部分

拷貝構(gòu)造函數(shù):
一種特殊的構(gòu)造函數(shù),它在創(chuàng)建對(duì)象時(shí),使用用一類中之前創(chuàng)建的對(duì)象來初始化新創(chuàng)建的對(duì)象??截悩?gòu)造函數(shù)通常用于:

  1. 通過使用另一個(gè)同類型的對(duì)象來初始化新創(chuàng)建的對(duì)象
  2. 復(fù)制對(duì)象把他作為參數(shù)傳遞給函數(shù)
  3. 復(fù)制對(duì)象,并從函數(shù)返回這個(gè)對(duì)象

如果在類中沒有定義拷貝構(gòu)造函數(shù),編譯器會(huì)自行定義一個(gè)。如果類帶有指針變量,并有動(dòng)態(tài)內(nèi)存分配,則他必須有一個(gè)拷貝構(gòu)造函數(shù)。

classname (const classname &obj) {
// 構(gòu)造函數(shù)的主體
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容