Страница 1 из 2

А можно ли бросать исключения из конструктора?

Добавлено: 12 дек 2015, 15:42
Сионист
И будет ли в этом случае объект корректно создан?

Re: А можно ли бросать исключения из конструктора?

Добавлено: 12 дек 2015, 19:22
Absurd
Можно и память будет освобождена автоматически, но деструкторы не до конца сконструированных подобъектов не будут вызваны включая деструктор того объекта где собственно и произошло исключение в конструкторе.

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 07:41
Сионист
А обращаться к нему имеет смысл?

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 15:14
Absurd
К кому обращаться?

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 15:34
Сионист
К объекту. Есть класс, в нём конструктор, некоторые члены класса сами являются объектами. Исключение брошено в конструкторе после задания значений всех членов. Часть членов специально предназначена для подробной информации об ошибке, а один член - о факте ошибки. Имеет ли смысл после исключения обращаться к функциям-членам и операторам-членам, инкапсулирующим доступ к членам с информацией об ошибках?

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 15:41
Absurd
Если брошено исключение в конструкторе, то объекта и не было никогда.

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 15:44
Сионист
То есть? И как тогда перед обращении к нему проверить валидность? Или всё таки в конструкторе нельзя?

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 15:51
Absurd
Очевидно что если во время конструирования не было исключений, то объект валиден. А если были, то ты не имел никакого способа получить ссылку на этот объект.

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 15:58
Сионист
То есть?

Код: Выделить всё

A a(x);
if ((bool)a)
{
}
. Это написано на этапе разработки, а исключение брошено при исполнении.

Re: А можно ли бросать исключения из конструктора?

Добавлено: 13 дек 2015, 16:07
Absurd
Недеюсь мне не надо объяснять, что если в конструкторе а брошено исключение, то на if ты не попадешь. Попадешь на ближайший подходящий catch() выше по стеку.