Два вопроса 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;
}
}
OUTPUT: catch (int & i)// печатает 2 catch (int i) // печатает 1
По моему мнению,
Я думаю, что до тех пор, пока оно является ссылочным, значение будет затронуто, если его 'pass'по значению »на промежуточном этапе.это все еще бросает оригинальный объект во второй улов.
(т.е.) поток управления для переменной действительно не выбрасывает промежуточный улов .....