2 回答

TA貢獻1829條經(jīng)驗 獲得超7個贊
你沒有明確什么叫“構(gòu)造函數(shù)失敗”。我的理解是:構(gòu)造函數(shù)中某一個執(zhí)行過程沒有得到你期望的結(jié)果。
如果我的理解是你想表達的,那么構(gòu)造函數(shù)內(nèi)部的處理是這樣:
1. 構(gòu)造函數(shù)想通知外部自己構(gòu)造失敗,只有拋異常這一個途徑(沒有返回值);
2. 如果你不拋異常,那么構(gòu)造函數(shù)執(zhí)行完畢,從語言層面上編譯器認為該對象是正確構(gòu)造了的,只有你知道其實構(gòu)造沒有按預(yù)想的進行,所以你需要用狀態(tài)變量、構(gòu)造函數(shù)引用參數(shù)或什么其他玩意兒讓外界可以知道構(gòu)造失敗了。
3. 如果你拋異常標識構(gòu)造失敗,那么,所有已經(jīng)構(gòu)造好的基類對象和數(shù)據(jù)成員會按照構(gòu)造逆序逐個進行析構(gòu)(基礎(chǔ)數(shù)據(jù)類型除外,因為它們析構(gòu)就是什么都不做)。這里有一點要注意,如果發(fā)生了動態(tài)內(nèi)存分配,那需要在拋異常前手動釋放內(nèi)存,否則會有內(nèi)存泄漏。

TA貢獻1859條經(jīng)驗 獲得超6個贊
1、構(gòu)造函數(shù)想通知外部自己構(gòu)造失敗,只有拋異常這一個途徑(沒有返回值);
2、 如果不拋異常,那么構(gòu)造函數(shù)執(zhí)行完畢,從語言層面上編譯器認為該對象是正確構(gòu)造了的,其實構(gòu)造沒有按預(yù)想的進行,所以需要用狀態(tài)變量、構(gòu)造函數(shù)引用參數(shù)就可以讓外界可以知道構(gòu)造失敗了。
3.、如果拋異常標識構(gòu)造失敗,那么,所有已經(jīng)構(gòu)造好的基類對象和數(shù)據(jù)成員會按照構(gòu)造逆序逐個進行析構(gòu)(基礎(chǔ)數(shù)據(jù)類型除外,因為它們析構(gòu)就是什么都不做)。這里有一點要注意,如果發(fā)生了動態(tài)內(nèi)存分配,那需要在拋異常前手動釋放內(nèi)存,否則會有內(nèi)存泄漏。
構(gòu)造函數(shù) ,是一種特殊的方法。主要用來在創(chuàng)建對象時初始化對象, 即為對象成員變量賦初始值,總與new運算符一起使用在創(chuàng)建對象的語句中。特別的一個類可以有多個構(gòu)造函數(shù) ,可根據(jù)其參數(shù)個數(shù)的不同或參數(shù)類型的不同來區(qū)分它們 即構(gòu)造函數(shù)的重載。
- 2 回答
- 0 關(guān)注
- 1279 瀏覽
添加回答
舉報