两个问题 1) 当一个对象/变量被抛出去捕获时会发生什么?比如说,
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;
}
}
在这种情况下,这里会发生什么?创建一个新变量然后通过???
如果我使用没有引用的指针或变量怎么办
像 catch(int *i) // 或 catch (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;
}
}
输出:catch(int &i) // 打印 2 catch(int i) // 打印 1
根据我的判断,
我认为,只要它是参考,如果它在中间步骤中“按值传递”,值就会受到影响。它仍然将原始对象扔给第二个捕获物。
(即)变量的控制流真的不抛出中间捕获.....