Является ли `std :: exception` в его текущей форме избыточным? - PullRequest
0 голосов
/ 03 декабря 2018

Обычно, когда я хочу создать свое собственное исключение, я наследую от std::exception или std::runtime_error.

Есть ли что-то, что мешает мне создать свой собственный пустой "тег-класс"?

class out_of_bounds_access {}; // or:
class memory_leak {};

и бросить только это?
В конце концов, в основном это имя класса, несущее информацию о том, что пошло не так, а не члены класса исключения.

Хорошо, поэтому я предположил, что это плохая идея, но почему?Почему это плохая идея?

PS Я знаю, что есть случаи, когда «сделанные по заказу» исключения содержат информацию, которая используется для определения правильного подхода к решению проблемы ...
Однако, если вы подумаете об этом, подобные случаи можно очень часто (не всегда, но часто) делать заново, чтобы бросать и ловить несколько разных классов тегов вместо одного (с «контентом»).

1 Ответ

0 голосов
/ 03 декабря 2018

Нет, ничто не мешает вам сделать это.

Однако, некоторый код, который хочет перехватить «любое исключение», поймает const std::exception&, и если ваш тип исключения не является производным от std::exception, тогдаэто не сработает.

Конечно, мы можем поймать ... вместо этого, но, по моему опыту, оно используется как "тупой инструмент" последнего рывка для избежания завершения из-за неисследованных исключений, и не можетсказать вам что-нибудь о самом исключении.

Повышение исключений не происходит от std::exception, и это действительно раздражает .

Почему бы не простосделать все исключения частью этой стандартной иерархии?

Если вы не намерены когда-либо позволять, чтобы ваши типы исключений доходили до самого верха, то здесь не может быть практической проблемы.Но зачем рисковать?Вы ничего не потеряете, добавив : std::runtime_error или что-то подобное, и текстовая строка, которую вы передадите в базу, будет полезной информацией для программиста, диагностирующего диагноз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...