C++中析構函數失敗說明什么

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

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網綜合服務,包含不限于網站制作、網站設計、康縣網絡推廣、成都小程序開發(fā)、康縣網絡營銷、康縣企業(yè)策劃、康縣品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供康縣建站搭建服務,24小時服務熱線:028-86922220,官方網址:muchs.cn

析構函數不應該失敗    
Reason(原因)

如果析構函數會失敗,通常我們也不知道怎么寫出沒有錯誤的代碼。標準庫要求它處理所有的類的析構函數都不要拋出異常。

Example(示例)

class X {      
     

public:

   ~X() noexcept;

   // ...

};

X::~X() noexcept {

   // ...

   if (cannot_release_a_resource) terminate();

   // ...

}

Note(注意)

為了發(fā)明處理析構函數中的錯誤的可靠方法,人們已經進行了各種嘗試。沒有任何一種方法發(fā)展成通用的做法。這是一個真正的實踐性問題:例如,socket不能關閉時怎么辦?析構函數的編寫者不知道析構函數因為什么被調用,而且不能通過拋出異常來拒絕這個動作。更為嚴重的是,很多“關閉/釋放"操作是不可重試的。如果可能的話,將關閉/釋放時發(fā)生的錯誤當作基本的設計錯誤并終止執(zhí)行。 

Note(注意)

將析構函數定義為noexcept。這將保證要么正常結束析構,要么終止程序。

Note(注意)    

如果資源不能被釋放而且程序有可能不失敗,以某種方式(甚至可以是修改某些全局變量并寄希望于某些程序會注意并處理該問題)向程序的其他部分發(fā)出錯誤信號。需要充分意識到這個技術的特殊目的,而且容易發(fā)生錯誤。考慮示例“我的鏈接不會關閉"。有可能在連接的另一端存在問題,而且對于鏈接的兩端來說,只存在一段代碼負有正確地處理這個問題的責任。析構函數可以(以某種方式)向系統(tǒng)中負責處理錯誤的部分發(fā)送一條消息,同時認為我們已經關閉了鏈接并正確的返回了。

Note(注意)

如果析構函數使用了可能失敗的操作,它可以自己捕捉異常并且在有些情況下依然成功地結束(例如使用拋出異常之外的不同的清除機制)。

Enforcement(實施建議)

(簡單)如果可能拋出異常,那么析構函數應該聲明為noexcept。  

譯者注:聲明noexcept,編譯器就不會生成異常的傳遞機制,這時一旦拋出異常,程序會直接中止。    

到此,關于“C++中析構函數失敗說明什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

文章標題:C++中析構函數失敗說明什么
本文來源:http://muchs.cn/article26/piecjg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網頁設計公司、品牌網站建設建站公司、搜索引擎優(yōu)化、用戶體驗虛擬主機

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)