首页 文章

在容器之间移动std :: unique_ptr [重复]

提问于
浏览
-2

这个问题在这里已有答案:

尝试在容器之间移动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 回答

  • 0

    std::setstd::multiset 仅提供对其元素的 const 访问权限 . 这意味着你不能移动一些东西 . 如果您可以移出项目(或根本不修改它们),您可以通过更改项目的排序顺序来中断该项目 . 所以C 11禁止它 .

    因此,尝试使用 std::move 算法只会调用复制构造函数 .

    一旦你将unique_ptrs放在一个集合中,它们就会被卡住 .

    source谢谢你 .

相关问题