这个问题在这里已有答案:
尝试在容器之间移动unique_ptrs时遇到了问题 . 我有一个std :: unordered_set被称为元素,其中包含一堆unique_ptrs . 我想将其中一些移动到另一个名为subelements的unordered_set . 我该怎么做呢?
这是我的功能:
void MeshContainer::MoveSubelements(){
int mesh_dim = MeshDimension();
for(auto el=elements.begin(); el!= elements.end(); ++el){
if((*el)->getDim() != mesh_dim){
subelements.insert(std::move(*el));
elements.erase(*el);
}
}
}
我使用上面的代码得到以下编译器错误:
错误:使用已删除的函数'std :: unique_ptr <_Tp,_Dp> :: unique_ptr(const std :: unique_ptr <_Tp,_Dp>&)[with _Tp = MEl; _Dp = std :: default_delete]'
我认为问题必须与复制构造函数有关,但我认为使用std :: move会解决这个问题 .
有任何想法吗?
谢谢!
1 回答
std::set
和std::multiset
仅提供对其元素的const
访问权限 . 这意味着你不能移动一些东西 . 如果您可以移出项目(或根本不修改它们),您可以通过更改项目的排序顺序来中断该项目 . 所以C 11禁止它 .因此,尝试使用
std::move
算法只会调用复制构造函数 .一旦你将unique_ptrs放在一个集合中,它们就会被卡住 .
source谢谢你 .