web-dev-qa-db-fra.com

supprimer unique_ptr de la file d'attente

J'essaie de comprendre comment/si je peux utiliser unique_ptr dans un 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(); 

Je comprends pourquoi le code ci-dessus ne fonctionne pas. Étant donné que front & pop sont 2 étapes distinctes, l'élément ne peut pas être déplacé. Y a-t-il un moyen de faire cela?

52
Ilia Choly

Vous devez dire explicitement que vous voulez déplacer le pointeur hors de la file d'attente. Comme ça:

std::unique_ptr<int> p2 = std::move(q.front());
q.pop();
66
ybungalobill