這篇文章主要介紹“C++中析構(gòu)函數(shù)失敗說明什么”,在日常操作中,相信很多人在C++中析構(gòu)函數(shù)失敗說明什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++中析構(gòu)函數(shù)失敗說明什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、網(wǎng)站設(shè)計、康縣網(wǎng)絡(luò)推廣、成都小程序開發(fā)、康縣網(wǎng)絡(luò)營銷、康縣企業(yè)策劃、康縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供康縣建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.chinadenli.net
如果析構(gòu)函數(shù)會失敗,通常我們也不知道怎么寫出沒有錯誤的代碼。標(biāo)準(zhǔn)庫要求它處理所有的類的析構(gòu)函數(shù)都不要拋出異常。
public:
~X() noexcept;
// ...
};
X::~X() noexcept {
// ...
if (cannot_release_a_resource) terminate();
// ...
}
為了發(fā)明處理析構(gòu)函數(shù)中的錯誤的可靠方法,人們已經(jīng)進(jìn)行了各種嘗試。沒有任何一種方法發(fā)展成通用的做法。這是一個真正的實踐性問題:例如,socket不能關(guān)閉時怎么辦?析構(gòu)函數(shù)的編寫者不知道析構(gòu)函數(shù)因為什么被調(diào)用,而且不能通過拋出異常來拒絕這個動作。更為嚴(yán)重的是,很多“關(guān)閉/釋放"操作是不可重試的。如果可能的話,將關(guān)閉/釋放時發(fā)生的錯誤當(dāng)作基本的設(shè)計錯誤并終止執(zhí)行。
將析構(gòu)函數(shù)定義為noexcept。這將保證要么正常結(jié)束析構(gòu),要么終止程序。
如果資源不能被釋放而且程序有可能不失敗,以某種方式(甚至可以是修改某些全局變量并寄希望于某些程序會注意并處理該問題)向程序的其他部分發(fā)出錯誤信號。需要充分意識到這個技術(shù)的特殊目的,而且容易發(fā)生錯誤。考慮示例“我的鏈接不會關(guān)閉"。有可能在連接的另一端存在問題,而且對于鏈接的兩端來說,只存在一段代碼負(fù)有正確地處理這個問題的責(zé)任。析構(gòu)函數(shù)可以(以某種方式)向系統(tǒng)中負(fù)責(zé)處理錯誤的部分發(fā)送一條消息,同時認(rèn)為我們已經(jīng)關(guān)閉了鏈接并正確的返回了。
如果析構(gòu)函數(shù)使用了可能失敗的操作,它可以自己捕捉異常并且在有些情況下依然成功地結(jié)束(例如使用拋出異常之外的不同的清除機(jī)制)。
(簡單)如果可能拋出異常,那么析構(gòu)函數(shù)應(yīng)該聲明為noexcept。
譯者注:聲明noexcept,編譯器就不會生成異常的傳遞機(jī)制,這時一旦拋出異常,程序會直接中止。
到此,關(guān)于“C++中析構(gòu)函數(shù)失敗說明什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
文章標(biāo)題:C++中析構(gòu)函數(shù)失敗說明什么
本文來源:http://www.chinadenli.net/article26/piecjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、品牌網(wǎng)站建設(shè)、建站公司、搜索引擎優(yōu)化、用戶體驗、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)