為什麼 C 不使用巢狀異常來允許從析構函數拋出異常?
雖然通常不建議從析構函數拋出異常,但有有人建議在這種情況下使用巢狀異常。然而,由於某些限制,這個想法還沒有實現。
巢狀異常與 std::terminate
當一個異常從析構函數拋出時,另一個異常可能是「在飛行中」。嵌套異常允許堆疊多個異常,但在這種情況下,並不能立即清楚如何處理這種情況。從歷史上看,決定應該呼叫 std::terminate (或其關聯的處理程序 std::terminate_handler)。
巢狀異常的限制
雖然巢狀異常可以可能解決析構函數拋出的問題,但有實際限制:
當前狀態和未來前景
從 C 11 和 C 14 開始,嵌套異常為不用於從析構函數中拋出。 std::terminate 仍然是預設行為。然而,如果潛在的效能和相容性問題得到解決,這可能會在未來的 C 版本中發生變化。
替代方法
替代方法可以從析構函數中拋出,而不是從析構函數中拋出需要考慮:
以上是為什麼 C 不使用巢狀異常來進行析構函數拋出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!