我在priority_queue中维护一组unique_ptr实例.在某些时候,我想获得第一个元素并将其从队列中删除.但是,这总是会产生编译器错误.请参阅下面的示例代码
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; ^
像this question一样更改代码使用队列修复了问题,代码编译得很好.
有没有办法将unique_ptrs保留在priority_queue中,或者我错过了什么?