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

Добрый вечер! не могу понять можно ли помещать умный указатель

в лист и главное - как его оттуда извлечь?
Вот я пытаюсь заполнить структуру данными и пихнуть указатель в лист:
std::unique_ptr<app_message> msg = std::make_unique<app_message>();
msg->size = message.size;
memcpy(msg->data, message.data, message.size);
msg->device_type = message.device_type;
msg->sourse_handle = message.sourse_handle;
app_list.push_back(std::move(msg)); //move for r-value ?:(
Эта часть хотя бы компилируется.
А вот пытаюсь извлечь указатель и тут беда:
auto &msg = app_list.front();
auto new_ptr = msg;
app_list.pop_front();
return msg;
Суть простая, хочу сделать из std::list очередь - в одном месте кладем соощения, в другом забираем - но я не понимаю почему в стандартных контейнерах нет такой простой опереации - pop удаляет элемент но не копирует его (как я понял из доков), а как сначала скопировать из очереди умный указатель и так чтобы он получил право владения ресурсом при этом?

7 ответов

11 просмотров

Всё ещё неправильно :( Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

emplace_back вам нужен

Alexey- Автор вопроса
다니엘(줄리아)
emplace_back вам нужен

видел эту функцию, но она очень похожа на void push_back(Type&& val) по смыслу. есть разница? в примерах же через push кладут цифры - т.е. r-value. или есть разница?

Alexey
видел эту функцию, но она очень похожа на void pu...

Разница в том, что emplace на месте элемент конструирует, а push - сначала создаёт элемент в контейнере, а затем присваивает ему переданное значение

Alexey
видел эту функцию, но она очень похожа на void pu...

emplace_back сразу в лист запихнет unique_ptr без копирований всяких

К слову, std::list не самый лучший вариант для очереди. Да и в принципе его лучше без особой на то надобности не трогать Есть std::queue поверх дека для очереди

Alexey- Автор вопроса
Georgy Firsov
К слову, std::list не самый лучший вариант для оче...

я и queue попробовал - но у них очень похожий api - и я в обоих случаях не понимаю как мне извлечь умный указатель обратно из контейнера. )))

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

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

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