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

Господа, в более простом чате данный вопрос вызвал срач, а

ответа так и не получил, задаю здесь.
Законно ли вызвать unique_ptr::reset к взятому адресу от переменной, выделенной на стеке?

37 ответов

16 просмотров

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

Я конечно не эксперт, но такой юникпоинтер будет невалидным после выхода их скоупа переменной

Как оно чудно грохнется на деструкторе, если не дать ему кастомный deleter

Anatoly Shirokov
твой исходный вопрос был другим, ответ на этот воп...

К сожалению явно этот вопрос ни на основной статье про юники, ни в статье по методу данный вопрос окучен не был.

Everybody Lies
К сожалению явно этот вопрос ни на основной статье...

тебе не статья нужна, а гарантии стандарта и описанное поведение

Anatoly Shirokov
тебе не статья нужна, а гарантии стандарта и описа...

https://en.cppreference.com/w/cpp/memory/unique_ptr Речь ведь о данном тексте?

Everybody Lies
https://en.cppreference.com/w/cpp/memory/unique_pt...

только вам не reset нужен, а release

@trueni сделать это тебе никто не помешает, но это будет неправильным, поскольку в деструкторе unique_ptr попытается освободить память по этому адресу и это будет неопределённым поведением. Не говоря уже о том, что такой указатель очень легко может повиснуть

Антон 🇦🇲
@trueni сделать это тебе никто не помешает, но это...

Благодарю нижайше за информативный ответ по теме

Антон 🇦🇲
@trueni сделать это тебе никто не помешает, но это...

А если освобождение памяти при выходе из скоупа вызова reset как раз и требуется?

Denis P
ну может там делитер "стековый"

Когда ты в последний раз создавал unique_ptr с кастомным делетером и при этом не от указателя, возвращённого new[]?

Everybody Lies
А если освобождение памяти при выходе из скоупа вы...

Если это стековая переменная, то память под неё и так будет освобождена. И деструктор будет вызван, если он у типа есть

Антон 🇦🇲
Когда ты в последний раз создавал unique_ptr с кас...

Где-то в этом году для файла я так делал

Denis P
вообще new[] не использую

То есть для аналогичных случаев ты просто вектор используешь?

Denis P
аналогичных чему

Когда тебе нужен набор объектов, количество которых известно только в рантайме

Ofee Oficsu
Да

Валидно. Но как это тебя угораздило?

Антон 🇦🇲
Валидно. Но как это тебя угораздило?

Как и всегда, бюджет на фиксы багов выделили, а на полноценный рефакторинг нет /shrug

Антон 🇦🇲
Если это стековая переменная, то память под неё и ...

Проблема в том, что переменная должна быть передана в виде указателя на базовый класс. Один из пользователей либы прислал баг репорт где он передал взятый от стековой переменной адрес вместо указателя. Тут вот и пришлось задумываться, как без фабрик и изменения внешних интерфейсов это дело окучить на своём уровне

Everybody Lies
Проблема в том, что переменная должна быть передан...

адрес стевокой переменной это тоже указатель

Everybody Lies
Проблема в том, что переменная должна быть передан...

М, сделать нужные типы данных шаблонными и прописать в требовании к типу, что он умеет разыменовываться в нужный?

Антон 🇦🇲
М, сделать нужные типы данных шаблонными и прописа...

Возможных для передачи типов больше трёх сотен

Everybody Lies
Проблема в том, что переменная должна быть передан...

И вообще, если программист пихает в unique_ptr адрес стековой переменной, то он ССЗБ

Denis P
мне кажется тут юник птр не подходит

Чисто технически подходит. И это было одной из причин, почему scope guards как-то не попали в стандарт

Ofee Oficsu
Чисто технически подходит. И это было одной из при...

чисто технически можно вместо любого RAII использовать unique_ptr

Зависит от обстоятельств. В частности надо понимать что это возможно

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта