Я поддерживаю набор unique_ptr
экземпляров в priority_queue
. В какой-то момент я хочу получить первый элемент и удалить его из очереди. Однако это всегда приводит к ошибке компилятора. См. Пример кода ниже.Получение уникального_птима из очереди приоритетов
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;
}
Это производит следующее сообщение об ошибке компилятора (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;
^
Изменение кода для использования queue
как в this question исправляет ошибку и код компилируется нормально.
Невозможно сохранить unique_ptr
s в priority_queue
или я что-то упустил?
Вы пробовали 'зЬй :: unique_ptr MyInt {станд :: ход (queue.top())}'? –
0x499602D2
Yup, дает то же сообщение об ошибке. – Chris