如何将唯一指针向量中的每个元素排入队列? (C++)
Posted
技术标签:
【中文标题】如何将唯一指针向量中的每个元素排入队列? (C++)【英文标题】:How to enqueue each element in a vector of unique pointers? (C++) 【发布时间】:2021-06-09 09:04:26 【问题描述】:我正在尝试将唯一指针向量的每个元素推入队列,但由于某种原因,我的代码无法编译。
我得到的错误是: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 auto &e
, std::move(e)
: 移动 const 元素会复制...
啊,谢谢。我不知道。
【参考方案1】:
你有一个额外的const
可以避免移动,而是做一个(删除的)副本:
删除它并使用:
for (auto &e : c)
queue_.push(std::move(e));
Demo
【讨论】:
非常感谢@Jarod42。 或许更好for (auto &&e : c)
以上是关于如何将唯一指针向量中的每个元素排入队列? (C++)的主要内容,如果未能解决你的问题,请参考以下文章
Android Work Manager:如何每月将作业排入队列