兩個問題 1)當一個Object /變量被拋出時會發生什麼?舉例來說,當我們拋出一個對象/變量來捕捉時會發生什麼?
int foo() {
FILE *fp = ....;
int dummy = 10;
int *dummy_ptr = new int[10];
throw 1;
}
int main() {
try {
foo();
} catch (int &i) {
std::cout<<"ERROR, the value is "<<i<<std::endl;
}
}
在這種情況下,這裏會發生什麼?一個新的變量,然後傳遞?
如果我用一個指針或變量不參考
像 趕上(INT * I)//或掛鉤(int i)以
此外,沒有所有的變量/資源聲明或啓動範圍內已被釋放/關閉?
2)同樣在重新拋出的情況下,如果我打算重新拋出一個引用,第二個catch得到一個新變量,如果我重新拋出沒有引用(即)的值,那麼在中間擲不受影響....
int goo() {
throw 2;
}
int foo() {
try{
goo();
} catch(int &i) { // (or) catch(int i) // i is not changing in the next line.
i = 2;
throw;
}
}
int main() {
try {
foo();
} catch (int &i) {
std::cout<<"ERROR, the value is "<<i<<std::endl;
}
}
OUTPUT: 捕獲(INT &ⅰ)//輸出2 趕上(int i)以//輸出1
從我的判斷,
我認爲,只要它是參考,價值就會受到影響,如果在中間步驟中它的「按價值傳遞」,價值將會受到影響 。它仍然會將原始對象拋向第二個catch。
(即)爲變量真的不扔中間制動器控制流.....
有道理,但我認爲它沒有道理......因爲,如果在堆/堆棧和東西錯誤之後,什麼是不刪除它的目的?在堆棧它工作正常,但不是在堆.....什麼使堆不同這裏?並且畢竟它是在這裏創建的,而不是從其他地方傳過來的......... – howtechstuffworks 2012-02-22 17:23:13
@howtechstuffworks你在堆上創建東西的原因是因爲你希望它們在你離開函數後繼續存在。 – 2012-02-22 17:31:39
^耶,詹姆斯,多數民衆贊成在一般意義上.......但最新點,如果你的功能失敗......你不想要一切回滾? – howtechstuffworks 2012-02-22 17:34:32