C++ 如何将每个元素排列在唯一指针向量中?(C+;+;)
我试图将唯一指针向量的每个元素推入队列,但由于某些原因,我的代码无法编译 我得到的错误是:C++ 如何将每个元素排列在唯一指针向量中?(C+;+;),c++,c++11,templates,queue,smart-pointers,C++,C++11,Templates,Queue,Smart Pointers,我试图将唯一指针向量的每个元素推入队列,但由于某些原因,我的代码无法编译 我得到的错误是:error:使用删除的函数'std::unique\u ptr::unique\u ptr(const std::unique\u ptr&)[with{u Tp=Foo;\u Dp=std::default\u delete] 由于我正在将唯一指针向量移动到排队函数中,并再次将每个元素移动到队列,因此我不确定这为什么不起作用 #include <memory> #include <vec
error:使用删除的函数'std::unique\u ptr::unique\u ptr(const std::unique\u ptr&)[with{u Tp=Foo;\u Dp=std::default\u delete]
由于我正在将唯一指针向量移动到排队
函数中,并再次将每个元素移动到队列
,因此我不确定这为什么不起作用
#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
};
#包括
#包括
#包括
类Foo{};
分类栏{
公众:
模板
无效排队(容器c){
用于(常数自动和电气:c){
队列推送(std::move(e));
}
};
私人:
std::队列;
};
int main(){
酒吧;
std::向量c;
c、 向后推(std::make_unique());
bar.enqueue(std::move(c));//此行导致了问题
};
您有一个额外的常量
,可以避免移动,而是进行(删除的)复制:
将其移除并使用:
for (auto &e : c) {
queue_.push(std::move(e));
}
您有一个额外的
常量
,可以避免移动,而是进行(删除的)复制:
将其移除并使用:
for (auto &e : c) {
queue_.push(std::move(e));
}
const auto&e
,std::move(e)
:moving const元素确实复制了…啊,谢谢。我不知道。const auto&e
,std::move(e)
:moving const元素会复制…啊,谢谢。我不知道。非常感谢@Jarod42。对于(auto&&e:c)可能更好
非常感谢@Jarod42。对于(auto&&e:c)可能更好