2013-12-09 50 views
-1

請我想讓別人向我解釋術語以及如何「按價值拋出並吸引我的參考」。有人對我說,我仍然是一個新的程序員,我似乎還不明白。按價值拋出並在C++中通過引用捕獲

+3

http://ptgmedia.pearsoncmg.com/images/0321113586/items/sutter_item73.pdf – Jamal

回答

2

孔捕捉引用是

...}catch(myException &me){ } 

所以,當你說catch(myException me),它會創建一個新的對象,但在基準情況下,它沒有。
另外,作爲catch塊中引用的異常意味着在訪問處理異常的對象時可以使用多態行爲。

如果異常是派生類型,這非常有用。 Click Me For More Info

+0

我認爲「拋出價值」意味着「沒有必要說'new',即'throw std :: runtime_error (「message」)'而不是'throw new std :: runtime_error(「message」)' –

3

「按值拋出」意味着不拋出(原始)指針。

當指針被拋出有雙delete一個很好的機會(這是UB)或無delete(泄漏內存),因爲一個處理程序如何才能知道是否是應該delete與否?

「通過參考捕獲」意味着通過參考捕獲,優選參考const。 這樣可以避免切分異常對象。例如,處理程序可以簡單地使用dynamic_cast來確定std::exception是否真的是std::system_error