исключений в конструкторе, вы же как хотите
Выделение ресурсов должно быть обёрнуто в соответствующие RAII классы
Ваше выделение ресурсов должно быть обернуто в RAII обертки
все успешно выделенные ресурсы будут освобождены
Не стоит этому остальных только учить
А если сам класс raii обертка?😊
Все его члены должны быть также RAII обертками над своими ресурсами, речь об этом
Все ваши раии обертки где-то останавливаются😊
"Вложенность владения" ресурсами как правило невелика, плюс ко всему для бОльшего числа случаев подойдут стандартные классы вроде unique_ptr с кастомным deleter'ом
Самая глубокая RAII обертка, которая занимается хранением ресурса, и не должна бросать исключений просто исходя из её функциональности
И что делать, если ресурса не дали?
Не понимаю проблему - будет null внутри
Ну ок, допустим просто удалить поля бывает мало, может быть нужно подготовить объекты для удаления, за всем этим нужно следить. А вы как сами считаете, исключения в конструкторе норма? Практикуете?
Я считаю, что исключения в конструкторе можно использовать по назначению, но не пихаю их во все возможные места
Еще один момент, как вы напишете копирующий оператор присваивания, если у вас конструктор не бросает исключений? Как выделите копию ресурса и обработаете все связанные с этим ошибки? А если копируете "неинициализированный" объект? Вы серьезно возьметесь утверждать, что это лучше, чем copy-and-swap в три строки? Особенно, если класс владеет несколькими ресурсами сразу
"Подготовкой для удаления" занимается деструктор RAII обертки того объекта, который нужно "подготовить"
От bad alloc мы никак не уйдем, но мой посыл использовать исключения по минимуму
На bad_alloc свет клином не сошелся и я бы сказал даже, что его-то как раз обрабатывать почти никогда нет смысла
Правда ли что если вы словили bad alloс то уже всё)
А если нужно распутать поля перед вызовом их деструкторов? Деструктор поля не может знать о том куда он вовлечён в полной мере
Потому и "почти"
Наоборот, чаше всего только так и можно
Обсуждают сегодня