Sto mantenendo un insieme di istanze unique_ptr
in un priority_queue
. Ad un certo punto, voglio ottenere il primo elemento e rimuoverlo dalla coda. Tuttavia, questo produce sempre un errore del compilatore. Vedi il codice di esempio qui sotto.Estrazione di unique_ptr da una coda di priorità
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;
}
Questo produce il seguente errore del compilatore (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;
^
Cambiare il codice per utilizzare queue
come nel this question risolve il problema e il codice compila bene.
Non c'è modo di mantenere unique_ptr
s in un priority_queue
o mi manca qualcosa?
Hai provato 'std :: unique_ptr myInt {std :: mossa (queue.top())}'? –
0x499602D2
Sì, dà lo stesso messaggio di errore. – Chris