2012-04-14 36 views
0

此摘錄來自比亞的書:處理程序捕獲的對象是原始副本嗎?

原則上,當拋出一個異常被複制,所以處理程序獲取的原始異常的副本保持。事實上,在發現異常之前可能會複製多次異常。因此,我們不能拋出無法複製的異常。

如果我們通過引用或指針捕獲異常,那麼這不適用。我對嗎?這裏 確實筆者意味着拋出的對象是第一內部複製和拷貝傳遞給處理程序的說法,這裏將再次被複制,如果處理程序參數是按值傳遞不管異常是由值或捕獲的

+0

一個相關的問題[如何在堆棧上分配超出其範圍的異常](http://stackoverflow.com/questions/2404288/how-are-exceptions-allocated-on-the-stack-caught-beyond-其作用域) – 2012-04-14 23:52:44

回答

2

引用它仍然是對象的副本。我可以推薦閱讀Meyers,更有效的C++,第12條「瞭解如何拋出一個異常不同於傳遞一個參數或調用一個虛函數」,這引出了一些光。
即使捕獲處理程序通過引用捕獲該引用必須是一個副本,因爲原始對象可能已被銷燬。
但是請注意,通過指針捕獲不涉及副本 - 但投擲者負責確保捕獲器獲取指針的異常未被銷燬。不建議用指針捕捉。這只是梅耶斯關於總是通過參考獲悉的一個原因,參見Meyers,第13項「通過引用捕捉異常」供其他人蔘考!

相關問題