В C++ можно кидать практически что угодно в качестве исключения. Но лучше всего кидать объекты, а не встроенные типы (вроде целых чисел или строк).
Самое важное правило — кидать экземпляры классов, которые в итоге наследуются от std::exception. Такой подход дает два серьезных преимущества:
std::exceptionСтандартный паттерн — кидать временный объект:
#include <stdexcept>
class MyException : public std::runtime_error {
public:
MyException() : std::runtime_error("MyException") { }
};
void f() {
throw MyException();
}
В этом примере:
MyException создается как временный объект и сразу кидаетсяstd::runtime_error, который наследуется от std::exceptionstd::exceptionЕсли ты следуешь этому паттерну, то пользователи смогут писать гибкий код обработки исключений. Они могут ловить твой конкретный тип исключения для детальной обработки или использовать std::exception для более широкого перехвата. Это также позволяет тебе предоставлять осмысленную информацию об ошибке через иерархию исключений, делая код более поддерживаемым и профессиональным.
Выбрасывание экземпляров классов, наследующих std::exception, позволяет вызывающему коду перехватывать исключения, используя базовый класс std::exception как универсальный обработчик.
Новый — ещё не проверен сообществом
Вы