Получение unique_ptr из очереди приоритетов
Я поддерживаю наборunique_ptr
случаи вpriority_queue
, В какой-то момент я хочу получить первый элемент и удалить его из очереди. Однако это всегда приводит к ошибке компилятора. Смотрите пример кода ниже.
int main ()
{
std::priority_queue queue;
queue.push(std::unique_ptr(new int(42)));
std::unique_ptr myInt = std::move(queue.top());
return 1;
}
Это приводит к следующей ошибке компилятора (gcc 4.8.0):
uptrtest.cpp: In function ‘int main()’: uptrtest.cpp:6:53: error: use of deleted function ‘std::unique_ptr::unique_ptr(const std::unique_ptr&) [with _Tp = int; _Dp = std::default_delete]’ std::unique_ptr 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;
^
Изменение кода для использованияqueue
как вэтот вопрос решает проблему, и код компилируется просто отлично.
Нет ли способа сохранитьunique_ptr
вpriority_queue
или я что-то упустил?