170 похожих чатов

Это больше абстрактный вопрос. К примеру, в конструкторе успели выделить

дин. память, а затем выбросили исключение не обработав. Что делать с той дин. памятью и может что еще нужно? Или нужно не допускать таких ситуаций и все обрабатывать в конструкторе или функциональным try-блоком

10 ответов

2 просмотра

Дам абстрактный ответ: если ты выделяешь в конструкторе динамическую память и сохраняешь её в сырой указатель - проблема в этом, а не в исключении

Если в конструкторе было выкинуто исключение - то деструктор этого класса не вызывается. Вызывается деструктор только у полей класса, которые созданы на стеке Стандартное решение, чтобы память в этом случае не утекала - обернуть её в unique_ptr

Denis P
причем тут стек вообще?

При том, что если ты создашь объект на куче - у него ничего не вызовется, пока явно не сделаешь delete

Kirill 🚜
При том, что если ты создашь объект на куче - у не...

struct S {}; struct B { S s; }; int main() { auto p = std::make_unique<B>(); }

Kirill 🚜
Если в конструкторе было выкинуто исключение - то ...

В корректной программе на каждый (отработавший) конструктор вызывается деструктор, явно или неявно

Artöm Bakri Al-Sarmini
В корректной программе на каждый (отработавший) ко...

Если кинуто исключение - то он очевидно не считается отработавшим

Kirill 🚜
Если в конструкторе было выкинуто исключение - то ...

Неточно. Будут вызваны деструкторы всех полей, которые были инициализированы в момент выброса исключения. Сам this создан только после завершения конструктора, поэтому его деструктор не вызывается

Alexander Karaev
Неточно. Будут вызваны деструкторы всех полей, кот...

И если не был вызван делигирующий конструктор

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
75
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
49
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Обязательно ли смена методологии обучения алфавиту при смене алфавита(реформе письменности) - нет. А при смене глиненых табличек на попирус, нужно ли менять методологию обучен...
Spiker01
8
Я тут пытаюсь переработать архитектуру подсистемы памяти ядра во что-то осмысленное. Есть pmm, который создает набор range’ей(пока что только для ядра, потом для юзерспейса), ...
Evg Resh
19
а китайский фольц такой же как немецкий? а то я вижу китайские черри через год эксплуатации -- ну эээ оно такое...
Vyacheslav Olkhovchenkov
13
Проблема с Windows scripting control Множество объектов получают iDispatch обертки и отдаются в скрипты. При этом скрипты могут эти обертки держать живыми очень долго, наприм...
Arioch The
16
Товарищи, объясните недалекому: спустя какое-то время tgbot перестал отправлять сообщения. В логах пусто, просто уснул. Видел в issues на гите, что проблема не только у меня. ...
advanc3d
9
Карта сайта