繁体   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