で一連の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
のように使用するコードを変更すると、問題が修正され、コードは問題なくコンパイルされます。
unique_ptr
s を aに保持する方法はありませんか、priority_queue
それとも何か不足していますか?