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

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

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

37 ответов

12 просмотров

твой исходный вопрос был другим, ответ на этот вопрос - да, законно. только это не вопрос для чата, а для вдумчивого чтения 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

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

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

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

Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
13
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта