Иногда вам нужно написать конструктор, который может потерпеть неудачу. Например, скажем, я хочу создать экземпляр объекта с путем к файлу, что-то вроде
obj = new Object("/home/user/foo_file")
Пока путь указывает на соответствующий файл, все в порядке. Но если строка не является допустимым путем, все должно сломаться. Но как?
Ты мог:
- бросить исключение
- вернуть нулевой объект (если ваш язык программирования позволяет конструкторам возвращать значения)
- вернуть действительный объект, но с флагом, указывающим, что его путь не был установлен правильно (тьфу)
- другие?
Я предполагаю, что «лучшие практики» различных языков программирования будут реализовывать это по-разному. Например, я думаю, что ObjC предпочитает (2). Но (2) было бы невозможно реализовать в C ++, где конструкторы должны иметь void в качестве возвращаемого типа. В этом случае я понимаю, что (1) используется.
На выбранном вами языке программирования вы можете показать, как вы справитесь с этой проблемой, и объяснить, почему?
void
- они возвращают объект.
new
вызывает operator new
для выделения памяти, а затем конструктор для ее заполнения. Конструктор не возвращает ничего и new
возвращает указатель, полученный от него operator new
. Однако, «ничего не возвращает» подразумевает, что «возвращается void
» - дело за хваткой.