如何将每个元素排入唯一指针向量中? (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>]’
。
由于我将唯一指针的向量移动到 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));
}
我正在尝试将唯一指针向量的每个元素推送到队列中,但由于某种原因我的代码无法编译。
我得到的错误是: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));
}