尝试在容器之间移动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会解决这个问题。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
std::set
和std::multiset
仅提供 const
对其元素的访问权限。这意味着你不能移动一些东西。如果您可以移出项目(或根本不修改它们),您可以通过更改项目的排序顺序来中断该项目。所以C ++ 11禁止它。
因此,您尝试使用std::move
算法只会调用复制构造函数。
将unique_ptrs放入一组后,它们就会卡住。
source谢谢dyp。