Іноді потрібно написати конструктор, який може вийти з ладу. Наприклад, скажіть, що я хочу створити об'єкт шляхом до файлу, щось подібне
obj = new Object("/home/user/foo_file")
Поки шлях вказує на відповідний файл, все добре. Але якщо рядок не є дійсним шляхом, речі повинні зламатися. Але як?
Ви можете:
- кинути виняток
- повернути нульовий об'єкт (якщо ваша мова програмування дозволяє конструкторам повертати значення)
- повернути дійсний об'єкт, але з прапором, який вказує, що шлях не встановлений належним чином (ugh)
- інші?
Я припускаю, що "найкращі практики" різних мов програмування реалізували б це по-різному. Наприклад, я думаю, що ObjC віддає перевагу (2). Але (2) було б неможливо реалізувати в C ++ там, де конструктори повинні бути недійсними як тип повернення. У такому випадку я вважаю, що використовується (1).
Мовою програмування, яку ви вибрали, ви можете показати, як ви впораєтеся з цією проблемою, і поясніть, чому?
void
- вони повертають об'єкт.
new
закликає operator new
виділити пам'ять, а потім конструктор її заповнити. Конструктор нічого не повертає і new
повертає вказівник, який він отримав operator new
. Якщо "нічого не повертає", це означає, що "повернення void
" вирішується на захоплення.