Здравствуйте, Аноним, Вы писали:
А>... по ссылке и по указателю. В чем разница? Как надо делать?
Перехватывать надо тип исключения, который был сгенерирован. Если объект-исключение был создан через new ("throw new X;"), то ловить его нужно по указателю на этот объект ("catch(X*){ ... }"). Если исключение было создано как автоматический объект ("throw X();"), то перехватывать его можно как по значению, так и по ссылке. Разница между этими подходами следующая. Если был выброшен динамически созданный объект, его нужно удалить через delete. При перехвате по значению возможен эффект срезки (когда в последовательности catch-обработчиков сначала перехватывается тип базового класса), и это иногда может приводить к нежелательным результатам. При перехвате по ссылке срезки не происходит, и через delete объект уничтожать тоже не надо. Поэтому перехват по ссылке считается более удобным и безопасным.