function call throw
От: wobist  
Дата: 17.01.10 17:50
Оценка:
Если под лок. переменные (POD) не хватает памяти функция генерит bad_alloc?
void function(void) {int A[10000]; return;}

Тогда и функция void function(void) {int a; return;} не может быть объявлена как не генерирующая throw()?
Re: function call throw
От: remark Россия http://www.1024cores.net/
Дата: 17.01.10 17:55
Оценка: 1 (1) +1
Здравствуйте, wobist, Вы писали:

W>Если под лок. переменные (POD) не хватает памяти функция генерит bad_alloc?

W>void function(void) {int A[10000]; return;}

W>Тогда и функция void function(void) {int a; return;} не может быть объявлена как не генерирующая throw()?


АФАИК, в С++ нет понятия "стек", соотв. нет понятия "не хватает стека", соотв. поведение полностью зависит от реализации.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: function call throw
От: LaptevVV Россия  
Дата: 17.01.10 18:03
Оценка:
Здравствуйте, wobist, Вы писали:

W>Если под лок. переменные (POD) не хватает памяти функция генерит bad_alloc?

W>void function(void) {int A[10000]; return;}

W>Тогда и функция void function(void) {int a; return;} не может быть объявлена как не генерирующая throw()?

Зависит от реализации.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: function call throw
От: wobist  
Дата: 17.01.10 19:13
Оценка:
W>>Тогда и функция void function(void) {int a; return;} не может быть объявлена как не генерирующая throw()?

R>АФАИК, в С++ нет понятия "стек", соотв. нет понятия "не хватает стека", соотв. поведение полностью зависит от реализации.


Объявление function(...) throw() в стандарте означает: внутри исключений не генерируется. Значит в случае нехватки стека "ловить" нечего, но программа вылетает?
Re[3]: function call throw
От: Alexander G Украина  
Дата: 17.01.10 19:28
Оценка: 9 (2) +1
Здравствуйте, wobist, Вы писали:

W>Объявление function(...) throw() в стандарте означает: внутри исключений не генерируется.


Нет.

По стандарту оно означает, что компилятор обязан вызвать unexpected функцию, если исключение было выброшено.

http://www.gotw.ca/publications/mill22.htm
Русский военный корабль идёт ко дну!
Re: function call throw
От: Кодт Россия  
Дата: 17.01.10 21:34
Оценка: +1
Здравствуйте, wobist, Вы писали:

bad_alloc кидается, если не удалось выделить память в new / new[].
А если стек закончился, то сработает защита памяти (если она, конечно, есть в данной системе).
Дальше — насколько у авторов рантайма и у тебя самого хватит фантазии обработать сигнал/структурное исключение/...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.