Возможный дубликат:
Область объекта исключения в С++
У меня есть следующие уловки catch:
catch(Widget w);
catch(Widget& w);
void passAndThrowWidget() {
Widget localWidget;
throw localWidget;
}
Если мы поймаем объект Widget по значению, компилятор сделает копию, поэтому, когда мы бросаем исключение, localWidget выходит за пределы области видимости, и мы не видим никаких проблем.
Если мы поймаем объект byget byget, в соответствии с эталонной концепцией, "w" указывает на тот же локальный виджет, а не на копию. Но я видел, что большинство исключений попадают в ссылки на С++. Мой вопрос о том, как это работает как "localWidget", выходит за пределы области, когда генерируется исключение и улавливается ссылочными точками на уничтоженный объект.
Спасибо!