Использование try-catch внутри конструктора может считаться плохой практикой по нескольким причинам:
- Сложность очистки. 1 Конструктор переводит объект в безопасное начальное состояние, но может выполнять операции, которые не будут очищены, пока пользователь не закончит работать с объектом и не вызовет специальный очищающий метод. 1 Если из конструктора выбросить исключение, очищающее поведение может не сработать. 1
- Трудность обработки. 3 При росте программы количество выбрасываемых исключений увеличивается, и становится сложно их все обработать. 3 Особенно сложно обрабатывать методы, которые могут выбросить исключения разных типов. 3
- Сложность написания кода. 1 Обработчик часто должен знать, где брошено исключение, и содержать специфический код для места выброса. 1 Это делает код трудным для написания и ухода, особенно для больших систем. 1
Однако есть мнение, что нет ничего плохого в том, чтобы создавать исключение в конструкторе, и важно обрабатывать только те исключения, после которых можно восстановиться. 2