При использовании throw
в функции, напримерГде выбрасываются объекты?
try {
// ...
throw MyExceptionType()
// ...
} catch(MyExceptionType& exp){ /* ... */ }
Где MyExceptionType
выделяется? Это в стеке? Если да, безопасно ли изменить exp
в моем блоке catch
? Как насчет вызова некоторых других функций внутри catch
и использования стека?
В подобном случае у меня есть:
try {
char my_array[32];
throw my_array;
} catch(char* error_string){ /* ... */ }
ли error_string
указывая куда-то в стеке процесса? Могу ли я запускать массив, если я вызываю некоторые функции внутри блока catch
?
Ответит ли это на ваш вопрос? http://stackoverflow.com/questions/2404288/how-are-exceptions-allocated-on-the-stack-caught-beyond-their-scope – HAL
Ссылка HAL имеет хорошее объяснение. Интересно, как C++ 11 защищал поток «особого места». –
@brianbeuning: сообщая компиляторам, что это должно быть :) – user1233963