C++解構函式不能失敗的4個理由
解構函式非常特殊,編譯器將在不同的上下文中自動呼叫。由於其特殊性,C++標準有如下建議:在棧展開過程中,如果解構函式拋異常,terminate函式將被呼叫。因此,解構函式應該總是能夠捕獲異常,並且不會讓異常傳播到解構函式之外。(STL中的所有解構函式均不會失敗)。
對於解構函式可能丟擲異常的類,將有如下限制:
- 無法用於函式;當作為臨時變數(物件),在析構時拋異常將導致程式異常終止。
- 不能被繼承:派生類的析構過程也將可能丟擲異常;無法作為全域性或靜態變數。
- 無法用於陣列。陣列無法正確的回滾,行為可能未定義。假如陣列有10個元素,建立時出錯(建構函式拋異常),而回滾時需呼叫解構函式,但此過程有可能出現一個或多個異常。
- 無法用於STL容器中,STL禁止所有一起使用的物件析構時拋異常。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-676662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++解構函式C++函式
- [cpp]C++中的解構函式C++函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- C++ 建構函式和解構函式C++函式
- C++拷貝建構函式詳解C++函式
- 迴圈單連結串列建構函式、解構函式C++實現函式C++
- C++入門記-建構函式和解構函式C++函式
- C++之類解構函式為什麼是虛擬函式C++函式
- C++ 虛解構函式簡單測試C++函式
- 建構函式與解構函式函式
- en_concat函式編譯失敗處理函式編譯
- 例項解釋NLLLoss損失函式與CrossEntropyLoss損失函式的關係函式ROS
- 關於建構函式與解構函式的分享函式
- C/C++中的new/delete、構造/解構函式、dynamic_cast分析C++delete函式AST
- 詳解常見的損失函式函式
- c++ 的學習 建構函式1C++函式
- C++複製建構函式C++函式
- 預設建構函式和帶預設值的建構函式不能同時存在函式
- 【C++】初始化列表建構函式VS普通建構函式C++函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- del解構函式函式
- PHP筆記:建構函式與解構函式PHP筆記函式
- C++:建構函式的分類和呼叫C++函式
- 紅日4攻略失敗
- 以失敗為機制:奇異人生中的真實失敗與虛構性失敗
- 匿名函式(lambda)詳解 C++函式C++
- 2 分鐘,瞭解 4 個極為有用的 MetricsQL 函式SQL函式
- 三種方法解決docker構建失敗(alpine)Docker
- 函式、引數、解構函式
- 13-解構函式函式
- 建構函式詳解函式
- C++型別轉換建構函式C++型別函式
- 損失函式函式
- c++的remove函式C++REM函式
- C++之Big Three:拷貝構造、拷貝賦值、解構函式探究C++賦值函式
- 類的建構函式和解構函式函式
- C++函式C++函式
- c/c++ 拷貝控制 建構函式的問題C++函式