Исключения в C ++ должны создаваться по значению и перехватываться по ссылке.
Так что это правильный путь:
try
{
throw FoobarException(argument);
}
catch( const FoobarException &ex )
{
cout << ex.what() << endl;
}
Не выбрасывайте исключение, созданное с помощью new, посколькукто несет ответственность за его удаление, четко не определено.Кроме того, выполнение выделения во время обработки ошибок может вызвать другое исключение, скрывающее исходную проблему.
Вам не нужно перехватывать по константной ссылке (non-const будет работать нормально), но мне все равно нравится это делать.Однако вам следует всегда ссылаться (а не по значению), чтобы полиморфно перехватить исключение.Если вы этого не сделаете, тип исключения может быть нарезан.