Обработка исключений в теле конструктора

#c #exception #network-programming

Вопрос:

В настоящее время я пытаюсь реализовать класс TCP-сервера на C , который использует функции C для получения некоторых его ресурсов и предоставления функциональности класса в целом. Я следую Руководству Beej По Сетевому Программированию (http://www.beej.us/guide/bgnet/html/), который рекомендуется в нескольких сообщениях о сетевом программировании.

Однако руководство написано на языке Си, и я хотел придать всему более объектно-ориентированный дизайн, и после того, как я попробовал разные вещи, мне пришла в голову идея упаковать базовую процедуру TCP-сервера (create socket() , bind() , listen() , accept() ) в тело конструктора моего класса.

Таким образом, когда объект TCP-сервера (с переданным ему номером порта) будет создан, он будет готов установить соединение с клиентом.

Тем не менее, функции, упомянутые выше, могут не работать, т. Е. Необходимо учитывать обработку исключений, и я не знаю, является ли обработка исключений в теле конструктора плохой практикой (я не знаю о возможных последствиях).

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

Заранее спасибо!

Комментарии:

1. Если вы можете справиться с плохими состояниями, конструктор, на мой взгляд, такое же хорошее место, как и любое другое. Создание исключения в конструкторе означает, что вы не можете создать экземпляр недопустимого объекта. В зависимости от контекста проекта, выбрасывание исключений может быть вообще запрещено, но если это не так, меня бы это устроило, так как пользователь теперь вынужден так или иначе справляться с плохим состоянием. Так что, бросать исключения в конструкторах было бы неплохо, если бы это был я, но это скорее личное мнение, чем лучшая практика. Ничего не могу сказать по этому поводу.

2. Большое спасибо! Это многое проясняет 🙂