незванный гость писал(а):
Sanyok писал(а):
А между местом, где произошло исключение, и где его поймали - полет через вакуум?  

А как насчет неструктурного goto? Тут полет через вакуум Вас не удивляет?

  Просто применение goto дело добровольное  

  А в случае сбоев в конструкторе применение throw/try/catch - это скорее, дело добровольно-принудительное  

 . Второе (и, наверное, главное) - довольно плохо расписано, как эти исключения ловить. Я никак не мог найти, где черным по белому написано, какое исключение вырабатывается, если мы объем памяти превысили? Только это у меня заработало:
Код:
#include <stdio.h>
#include <memory>
class aclass 
{ 
private:
    int *ptr;
public:
    aclass(unsigned N)
    {  ptr = new int[N]; }
    ~aclass()
    {  delete [] ptr;    }
}; 
int main(int, char **)
{
    aclass *p;
    try
    {    p = new aclass(0xFFFFFFFF); }
    catch(std::bad_alloc)
    {    p = NULL; }
    printf(" pointer = %x \n", p);
    if(p)
        delete p;
    return 0;
}
Причем я до std::bad_alloc допер методом проб и ошибок часа через полтора!  Мож и попроще есть способы, без #include <memory> и std:: , но пока у меня получилось только так. Если каждый раз так искать, какое исключение ловить - можно поседеть лет на 30 раньше, чем рассчитывал (и прожить на столько же меньше  

 ).
Как узнать, какое именно исключение вырабатывается и что нужно ловить?? В Borland'е что-то выходило (там хоть сообщение вылазило, что за исключение возникло) а в консольном приложении GCC - вообще, глухо, как в танке.
исправил орфорграфию