Obtener un unique_ptr fuera de una cola de prioridad
Estoy manteniendo un conjunto deunique_ptr
instancias en unpriority_queue
. En algún momento, quiero obtener el primer elemento y eliminarlo de la cola. Sin embargo, esto siempre produce un error de compilación. Ver código de ejemplo a continuación.
int main ()
{
std::priority_queue<std::unique_ptr<int>> queue;
queue.push(std::unique_ptr<int>(new int(42)));
std::unique_ptr<int> myInt = std::move(queue.top());
return 1;
}
Esto produce el siguiente error de compilación (gcc 4.8.0):
uptrtest.cpp: In function ‘int main()’: uptrtest.cpp:6:53: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’ std::unique_ptr<int> myInt = std::move(queue.top());
^ In file included from /usr/include/c++/4.8/memory:81:0,
from uptrtest.cpp:1: /usr/include/c++/4.8/bits/unique_ptr.h:273:7: error: declared here
unique_ptr(const unique_ptr&) = delete;
^
Cambiando el código a utilizarqueue
como enesta pregunta Soluciona el problema y el código se compila bien.
¿No hay manera de mantenerunique_ptr
s en unpriority_queue
¿O me estoy perdiendo algo?