Ответ 1
Вы должны явно указать, что вы хотите вывести указатель из очереди. Вот так:
std::unique_ptr<int> p2 = std::move(q.front());
q.pop();
Я пытаюсь выяснить, как/если я могу использовать unique_ptr
в queue
.
// create queue
std::queue<std::unique_ptr<int>> q;
// add element
std::unique_ptr<int> p (new int{123});
q.push(std::move(p));
// try to grab the element
auto p2 = foo_queue.front();
q.pop();
Я понимаю, почему приведенный выше код не работает. Поскольку front
и pop
являются двумя отдельными шагами, элемент не может быть перемещен. Есть ли способ сделать это?
Вы должны явно указать, что вы хотите вывести указатель из очереди. Вот так:
std::unique_ptr<int> p2 = std::move(q.front());
q.pop();