C++解構函式不能失敗的4個理由

iDotNetSpace發表於2010-10-25
解構函式非常特殊,編譯器將在不同的上下文中自動呼叫。由於其特殊性,C++標準有如下建議:在棧展開過程中,如果解構函式拋異常,terminate函式將被呼叫。因此,解構函式應該總是能夠捕獲異常,並且不會讓異常傳播到解構函式之外。(STL中的所有解構函式均不會失敗)。

   對於解構函式可能丟擲異常的類,將有如下限制:

  1. 無法用於函式;當作為臨時變數(物件),在析構時拋異常將導致程式異常終止。
  2. 不能被繼承:派生類的析構過程也將可能丟擲異常;無法作為全域性或靜態變數。
  3. 無法用於陣列。陣列無法正確的回滾,行為可能未定義。假如陣列有10個元素,建立時出錯(建構函式拋異常),而回滾時需呼叫解構函式,但此過程有可能出現一個或多個異常。
  4. 無法用於STL容器中,STL禁止所有一起使用的物件析構時拋異常。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-676662/,如需轉載,請註明出處,否則將追究法律責任。

相關文章