Исключение в С++ можно бросить 2-мя способами:
Ну конечно объект может быть константным а ссылка неконстантной. Ну ладно. Суть в том что 3-ий catch ловит 2-ой throw, а 1-ый и 2-ой ловят 1-ый throw. Из двух последних предпочтительней 2-ой вариант потому что он не делает копии. Ловить надо тоже самое что и бросал иначе не поймаешь. Вариант с броском указателя вызывает проблемы с освобождением памяти которое нужно или не нужно делать в блоке catch в зависимости от того указывает ли указатель на объект размещенный в куче с помощью вызова new или нет. Поэтому самый лучший вариант - ловить по ссылке.- throw MyException();
- throw new MyException();
- catch( MyException ) {}
- catch( const MyException& ) {}
- catch( MyException* ){}
Комментариев нет:
Отправить комментарий