Как исключения, размещенные в стеке, попадают за их пределы?
В следующем коде стековая переменная ex генерируется и попадает в функцию, выходящую за рамки, в которых был объявлен ex. Это кажется мне немного странным, поскольку переменные (AFAIK), основанные на стеке, не могут использоваться вне области, в которой они были объявлены (стек разматывается).
void f() {
SomeKindOfException ex(...);
throw ex;
}
void g() {
try {
f();
} catch (SomeKindOfException& ex) {
//Handling code...
}
}
Я добавил оператор print в деструктор SomeKindOfException, и он показывает, что ex уничтожается, как только выходит из области видимости в f (), но затем он перехватывается в g () и снова уничтожается, как только выходит из области видимости.
Любая помощь?