簡體   English   中英

如何將唯一指針向量中的每個元素排入隊列? (C++)

[英]How to enqueue each element in a vector of unique pointers? (C++)

我正在嘗試將唯一指針向量的每個元素推入隊列,但由於某種原因,我的代碼無法編譯。

我得到的錯誤是: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Foo; _Dp = std::default_delete<Foo>]' error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Foo; _Dp = std::default_delete<Foo>]'

由於我將唯一指針向量移動到隊列enqueue中,然后再次將每個元素移動到queue_中,我不確定為什么這不起作用。

#include <memory>
#include <vector>
#include <queue>

class Foo {};

class Bar {
  
 public:
  template<typename Container>
  void enqueue(Container c) {
    for (const auto &e : c) {
      queue_.push(std::move(e));
    }
  };
  
 private:
  std::queue<std::unique_ptr<Foo>> queue_;
};

int main() {

  Bar bar;

  std::vector<std::unique_ptr<Foo>> c;
  c.push_back(std::make_unique<Foo>());

  bar.enqueue(std::move(c)); // this line is causing problem

};

您有一個額外的const可以避免移動並改為執行(已刪除)副本:

刪除它並使用:

for (auto &e : c) {
    queue_.push(std::move(e));
}

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM