Информация об изменениях

Сообщение Re[6]: RAII и исключения в конструкторе от 11.07.2020 10:25

Изменено 11.07.2020 10:44 rg45

Re[6]: RAII и исключения в конструкторе
Здравствуйте, Maniacal, Вы писали:

M>Есть такая книжка хорошая, только не помню как называется, что-то типа "С++ для профессионалов", что-то то там про количество советов было в названии.

M>Конструктор не должен бросать исключений принципиально.

Книжка эта называется Стандарты программирования на C++. 101 Правило и рекомендация.. И речь в ней идет не о конструкторах, а о деструкторах: 51. Деструкторы, функции освобождения ресурсов и обмена не ошибаются.

Для конструктора же бросок исключения — самый естественный способ сообщить о невозможности конструирования объекта (аутпут параметры я даже рассматривать не хочу). Даже оператор new обязан подчистить за собой выделенную память, если в конструкторе возникло исключение. Это в стандарте прописано.
Re[6]: RAII и исключения в конструкторе
Здравствуйте, Maniacal, Вы писали:

M>Есть такая книжка хорошая, только не помню как называется, что-то типа "С++ для профессионалов", что-то то там про количество советов было в названии.

M>Конструктор не должен бросать исключений принципиально.

Книжка эта называется Стандарты программирования на C++. 101 Правило и рекомендация.. И речь в ней идет не о конструкторах, а о деструкторах: 51. Деструкторы, функции освобождения ресурсов и обмена не ошибаются.

Для конструктора же бросок исключения — самый естественный способ сообщить о невозможности конструирования объекта (аутпут параметры я даже рассматривать не хочу). Даже оператор new обязан подчистить за собой выделенную память, если в конструкторе возникло исключение. Это в стандарте прописано. Стандарт так же описывает, что должно происходить при броске исключения из конструкторов подобъектов составных типов — те подобъекты, которые сконструированы на этот момент, должны быть корректно разрушены, причем, в строго определенном порядке. Смотри, сколько всего предусмотрено, а ты говоришь "не должен бросать принципиально". Ты, видимо, просто перепутал конструкторы с деструкторами.