更有效的C++項目號-13,項目13:通過引用捕獲異常。也可以說 - 要通過指向工作的異常來捕獲異常,程序員必須以保證對象在控制離開功能後存在的方式定義異常對象。全局和靜態對象正常工作。如何通過引用捕獲異常來解決本地變量問題
//其中通過指針捕捉異常
class exception { ... }; // from the standard C++
void someFunction()
{
static exception ex; // exception object
...
throw &ex; // throw a pointer to ex
...
}
void doSomething()
{
try
{
someFunction(); // may throw an exception*
}
catch (exception *ex)
{ // catches the exception*;
... // no object is copied
}
}
我的疑問是如何不同在通過引用捕捉異常的情況下的實例?如果它是一個局部變量(不是靜態的或全局的),那麼一旦控制離開函數,對象就不存在。那麼如何通過引用捕獲異常來解決問題?
如果我沒有錯,而我們使用引用調用,則不會創建副本。捕獲情況下的行爲是否有所不同? –
@DeveshAgrawal通過參考捕捉不會產生副本。按價值捕獲,如按價值傳遞,確實會生成副本。沒有像參考文獻那樣的東西;只有價值投擲。 – Potatoswatter
如果按價值投入並按引用方式獲取,則不會創建副本,對吧?因爲價值是本地的,所以一旦我們從功能中出來,它就會被破壞。 –