Как исключения, размещенные в стеке, попадают за их пределы?

В следующем коде стековая переменная ex генерируется и попадает в функцию, выходящую за рамки, в которых был объявлен ex. Это кажется мне немного странным, поскольку переменные (AFAIK), основанные на стеке, не могут использоваться вне области, в которой они были объявлены (стек разматывается).

void f() {
    SomeKindOfException ex(...);
    throw ex;
}

void g() {
    try {
        f();
    } catch (SomeKindOfException& ex) {
        //Handling code...
    }
}

Я добавил оператор print в деструктор SomeKindOfException, и он показывает, что ex уничтожается, как только выходит из области видимости в f (), но затем он перехватывается в g () и снова уничтожается, как только выходит из области видимости.

Любая помощь?

Ответы на вопрос(6)

Ваш ответ на вопрос