> Что касается g++, то в его случае, если я нигде не ошибся > при проверках, undefined behaviour сводится ко вторичному > SIGSEGV, который добивает программу непосредственно при > попытке throw (да, кстати, обработка сигнала - это не > обработка исключения, и нельзя там ставить throw без > параметра).
Реально сводится к SIGABRT. Если определить обработчик SIGABRT то попадем именно туда. Кстати, есть странность - при попытки игнорировать SIGABRT, происходит обработка данного сигнала БЕЗ установленного пользователем обработчика. Т.е. если определен:
void SigAbort(int)
{
printf( "SIGABRT\n" ); // никогда так не делайте ;)
}
То в результате выплнения программы мы увидим:
SIGABRT
Aborted
---
> Так что сорри. Перемешивание сигналов и исключений по > определению непереносимо между платформами, а SIGSEGV носит > фатальный характер по причинам, изложенным выше. Для этого, > в частности, если системой вызывается обработчик SIGSEGV, > то он вызывается в цикле до тех пор, пока не убьет > программу сам.
я понял - в морг, значит в морг :) Хотя если под виндами сделанно такое смешение, то почему бы его не сделать и под линухом.
Кстати, а тот текст что ты привел - это от куда ?
|