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

А выделения ресурсов в конструкторе? В общем я не фанат

исключений в конструкторе, вы же как хотите

23 ответов

21 просмотр

Выделение ресурсов должно быть обёрнуто в соответствующие RAII классы

Ваше выделение ресурсов должно быть обернуто в RAII обертки

все успешно выделенные ресурсы будут освобождены

Не стоит этому остальных только учить

Ramil-Rizvanov Автор вопроса
Ramil Rizvanov
А если сам класс raii обертка?😊

Все его члены должны быть также RAII обертками над своими ресурсами, речь об этом

Ramil-Rizvanov Автор вопроса
Max Kolesnikov
Все его члены должны быть также RAII обертками над...

Все ваши раии обертки где-то останавливаются😊

Ramil Rizvanov
Все ваши раии обертки где-то останавливаются😊

"Вложенность владения" ресурсами как правило невелика, плюс ко всему для бОльшего числа случаев подойдут стандартные классы вроде unique_ptr с кастомным deleter'ом

Ramil Rizvanov
Все ваши раии обертки где-то останавливаются😊

Самая глубокая RAII обертка, которая занимается хранением ресурса, и не должна бросать исключений просто исходя из её функциональности

Boris Usievich
И что делать, если ресурса не дали?

Не понимаю проблему - будет null внутри

Ramil-Rizvanov Автор вопроса
Alexander Karaev
Самая глубокая RAII обертка, которая занимается хр...

Ну ок, допустим просто удалить поля бывает мало, может быть нужно подготовить объекты для удаления, за всем этим нужно следить. А вы как сами считаете, исключения в конструкторе норма? Практикуете?

Ramil Rizvanov
Ну ок, допустим просто удалить поля бывает мало, м...

Я считаю, что исключения в конструкторе можно использовать по назначению, но не пихаю их во все возможные места

Ramil Rizvanov
Ну ок, допустим просто удалить поля бывает мало, м...

Еще один момент, как вы напишете копирующий оператор присваивания, если у вас конструктор не бросает исключений? Как выделите копию ресурса и обработаете все связанные с этим ошибки? А если копируете "неинициализированный" объект? Вы серьезно возьметесь утверждать, что это лучше, чем copy-and-swap в три строки? Особенно, если класс владеет несколькими ресурсами сразу

Ramil Rizvanov
Ну ок, допустим просто удалить поля бывает мало, м...

"Подготовкой для удаления" занимается деструктор RAII обертки того объекта, который нужно "подготовить"

Ramil-Rizvanov Автор вопроса
Max Kolesnikov
Еще один момент, как вы напишете копирующий операт...

От bad alloc мы никак не уйдем, но мой посыл использовать исключения по минимуму

Ramil Rizvanov
От bad alloc мы никак не уйдем, но мой посыл испол...

На bad_alloc свет клином не сошелся и я бы сказал даже, что его-то как раз обрабатывать почти никогда нет смысла

Ramil Rizvanov
От bad alloc мы никак не уйдем, но мой посыл испол...

Правда ли что если вы словили bad alloс то уже всё)

Ramil-Rizvanov Автор вопроса
Max Kolesnikov
"Подготовкой для удаления" занимается деструктор R...

А если нужно распутать поля перед вызовом их деструкторов? Деструктор поля не может знать о том куда он вовлечён в полной мере

Наоборот, чаше всего только так и можно

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта