Когда стоит использовать try - catch в C++?

программирование C++ programming си cpp

Ответы:
Когда происходят наиболее "опасные" вещи, например, открытие файла, открытие базы данных, выполнение запросов, обращение в сети, закрытие и освобождение ресурсов и так далее. Слишком много try-ев тоже плохо, замедляет работу системы, так как там выделяются свои внутренние ресурсы, циклирование и так далее, так что ставьте только в критических местах.
Когда происходят наиболее "опасные" вещи, например, открытие файла, открытие базы данных, выполнение запросов, обращение в сети, закрытие и освобождение ресурсов и так далее. Слишком много try-ев тоже плохо, замедляет работу системы, так как там выделяются свои внутренние ресурсы, циклирование и так далее, так что ставьте только в критических местах.
1) когда надо в любом случаа освободить захваченный в локальном методе системный ресурс
2) когда мы в этом месте знаем как обработать ошибку
Вот я знаю, когда не стоит:
причем тут выделение ресурсов!? например open(..)  и его варианты
в большинстве своем сигнализируют об ошибке через код возврата,
который и надо проверять. try - catch здесь как мертвому припарка :)
В любом месте, где может произойти ошибка(или множество ошибок сразу) и нет стандартных методов обработки этой ошибки(ошибок) средствами С/С++. В остальных случаях следует однозначно выкручиваться с помощью стандартных обработчиков ошибок, менять алгоритм выполняемого действия.
Самый простой пример: открытие файла
int some_read_function()
{
ifstream input;
input.open("c:\*.txt");
if ( !input.is_open() )
  return 1; // сдесь допустим код ошибки
// основной код функции
return 0;
}
замена сдесь проверки открытия файла на try/catch бессмысленна и накладна потому, что имеется уже готовая функция проверки открытия файла и с помощью нее можно полноценно выполнить проверку.
Вставка try/catch будет полностью оправдана при работе с базой данных(чтение и запись значений полей таблицы например) если в коде программы у вас может случиться сразу несколько ошибок/исключительных ситуаций(например функция [чтения/записи/сравнения чего-то] должна была сначала прочитать, а при записи случилась какая-то лажа).
В принципе можно вообще обойтись без стандартных функций проверки ошибок и заменить их все на try/catch, однако в данном случае вполне не исключено, что вы потеряете часть производительности программы( причем в большинстве случаев незначительную). Однако надо быть осторожным при использовании этих проверок в быстродействующем коде(например в ассемблерных вставках).
Использование блоков try/catch ограничивается только Вами. В целом, их использование делает программу более стабильной, но при одном единственном условии: проверка обдумана и нужна в данном месте программы, иначе - все проверки являются лишь грудой бесполезного кода.
> Учти что сами по себе исключения C++ не бесплатны. В критических по скорости участках кода, использование множества вложенный try-catch может замедлить выполнение.
try-catch стоит использовать в двух случаях:
1. когда вы пользуетесь библиотекой, которая кидает исключения
2. когда вы сами кидаете исключения и хотите их обрабатывать
как пример дизайна с исключениями такая идея - если вы смогли создать объект, то он уже корректно инициальзирован. тогда если что-то пошло не так в конструкторе объекта кидается исключение и оно ловится с помощью try-catch
Грубо говоря - в любом проекте от 5k строк кода. В этом случае, он скорее всего ожиреет процентов на 5-10, но
1) читаемость возрастает до 100%
2) дебаг будет проще на 70%
3) расширение системы в будущем будет упрощено до 80%


17 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.