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

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

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

37 ответов

8 просмотров

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

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

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

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

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

Александр Крылов
К сожалению явно этот вопрос ни на основной статье...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ofee Oficsu
Да

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

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

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

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

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

Александр Крылов
Проблема в том, что переменная должна быть передан...

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

Александр Крылов
Проблема в том, что переменная должна быть передан...

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

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

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

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

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

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

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann Chapmann
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Есть вопрос: допустим есть железка с каким-то интерфейсом(допустим usb), но как по этому интерфейсу железкой управлять неизвестно, прог нету, а управлять очень хочется надо. К...
Mixail Frolov
15
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Карта сайта