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

И чём RAII? В том, что сам unique_ptr в этом

случае авто?

25 ответов

27 просмотров

ну да

Да, в том, что unique_ptr управляет динамическим ресурсом память

Blue Talpa- Автор вопроса
Anatoly Shirokov
Да, в том, что unique_ptr управляет динамическим р...

Так, а вот объект MyClass же владеет каким-то там ресурсом res (пусть это файлом будет), и он же в динамической памяти. Или это уже не RAII?

Blue Talpa
Так, а вот объект MyClass же владеет каким-то там ...

Тоже raii, но выделенный в хипе myclass под управлением unique_ptr

Blue Talpa- Автор вопроса
Anatoly Shirokov
Тоже raii, но выделенный в хипе myclass под управл...

Но... Тогда почему они динамическими-то быть не должны? я этого понять не могу.

Blue Talpa
Но... Тогда почему они динамическими-то быть не до...

Речь о голых указателях, которые не поместили под управление скопгарда, в этом случае нет объекта, который вернет системе этот ресурс при выходе из скопа или при выбросе исключения

Blue Talpa
Так, а вот объект MyClass же владеет каким-то там ...

Ну должна быть выстроена цепочка владения, причём незамкнутая, объектов по RAII владеющими друг другом, в конце которой должен находится объект в автоматической памяти (переменная класса памяти auto)

Blue Talpa
Но... Тогда почему они динамическими-то быть не до...

Ты вообще сознаёшь, что в объектной модели С++ объекты одного и того же класса могут размещаться в памяти любого класса, глобальной, авто, динамической? Класс не может этим управлять, он не знает, где создадут его объект. Поэтому класс-протектор по RAII только строит механизм защиты, а уж применять его должен клиент этого класса, кто пишет код.

Blue Talpa- Автор вопроса
Anatoly Shirokov
Речь о голых указателях, которые не поместили под ...

Правило: Используйте идиому программирования RAII и не выделяйте объекты вашего класса динамически. Но же, блин, ровно динамически и выделяю в рамках RAII с юник-птром... Ладно, я тупой. я вряд ли пойму это правило.

Blue Talpa
Правило: Используйте идиому программирования RAII ...

auto ptr = std::make_unique<MyClass>(res); Где тут динамическое выделение ?

Blue Talpa- Автор вопроса
Blue Talpa- Автор вопроса
Anatoly Shirokov
Да ну тебя

Блин, ну сорян. Кто-то сразу въезжает, а кто-то я.

Blue Talpa
Конечно.

Ну, ок. соответственно, пользователь должен выстроить эту выше описанную мной цепочку владения по RAII с корнем в каком-то объекте в автоматической или глобальной памяти.

Blue Talpa
Внутри make_unique

Так кого еэто ебёт?

Blue Talpa- Автор вопроса
Blue Talpa
Внутри make_unique

В том и дело, что оно ГАРАНТИРОВАНО выделяет ресурс и тут же УПАКОВЫВАЕТ его в обёрточку, чтобы не сломать, и ГАРАНТИРОВАНО, ВСЕГДА удалить.

Blue Talpa- Автор вопроса
Ilya Zviagin
В том и дело, что оно ГАРАНТИРОВАНО выделяет ресур...

Но память же динамическая.. Блин, мне кажется, вы мне уже треснуть хотите, если честно

Ilya Zviagin
В том и дело, что оно ГАРАНТИРОВАНО выделяет ресур...

Разве выделение прям гарантировано? А если бед алокейт выбросит.

Blue Talpa- Автор вопроса
Anatoly Shirokov
resource acquisition is initialization

Да, я помню, мы как раз об этом говорим.

我が名はレギオン
Разве выделение прям гарантировано? А если бед ало...

Именно, а если выбросит, то всё, что выделилось, освободится, а что не выделилось - нет.

Blue Talpa
Внутри make_unique

Это деталь реализации, которая тебе не должна быть интересна в рамках вопроса. В этом смысл абстракций/инкапсуляции/интерфейсов Я попробую в очень кривую аналогию, так что не ругайтесь: asm-инструкции обычно не принято встраивать в C++-код, что вовсе не значит, что результат компиляции программы не должен превратиться в бинарный исполняемый файл, представимый как asm. Так вот, make_unique – такая же абстракция над динамическим выделением памяти, как и C++ над asm Рассуждая о конкретном слое абстракции, не стоит лезть на другие её уровни

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта