Здравствуйте, wobist, Вы писали:
W>Если под лок. переменные (POD) не хватает памяти функция генерит bad_alloc? W>void function(void) {int A[10000]; return;}
W>Тогда и функция void function(void) {int a; return;} не может быть объявлена как не генерирующая throw()?
АФАИК, в С++ нет понятия "стек", соотв. нет понятия "не хватает стека", соотв. поведение полностью зависит от реализации.
Здравствуйте, wobist, Вы писали:
W>Если под лок. переменные (POD) не хватает памяти функция генерит bad_alloc? W>void function(void) {int A[10000]; return;}
W>Тогда и функция void function(void) {int a; return;} не может быть объявлена как не генерирующая throw()?
Зависит от реализации.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
W>>Тогда и функция void function(void) {int a; return;} не может быть объявлена как не генерирующая throw()?
R>АФАИК, в С++ нет понятия "стек", соотв. нет понятия "не хватает стека", соотв. поведение полностью зависит от реализации.
Объявление function(...) throw() в стандарте означает: внутри исключений не генерируется. Значит в случае нехватки стека "ловить" нечего, но программа вылетает?
bad_alloc кидается, если не удалось выделить память в new / new[].
А если стек закончился, то сработает защита памяти (если она, конечно, есть в данной системе).
Дальше — насколько у авторов рантайма и у тебя самого хватит фантазии обработать сигнал/структурное исключение/...