在容器之间移动std::unique_ptr
Moving a std::unique_ptr between containers
我遇到了一个问题,试图在容器之间移动unique_ptrs。我有一个std::unordered_set,叫做elements,它包含一堆unique_ptrs。我想把它们中的一些移到另一个名为子元素的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;[p]
我认为问题出在复制构造函数上,但我认为使用std::move可以解决这个问题。
任何想法?
谢谢!
std::set
和std::multiset
只允许 const
访问它们的元素。这意味着你不能将某物移出集合。如果可以将项移出(或修改它们),则可以通过更改项的排序顺序来打破集合。因此c++ 11禁止这样做。
因此,您尝试使用std::move
算法将只调用复制构造函数。
一旦你把unique_ptrs放到集合中,它们就被卡住了。
相关文章:
- 为什么 std::unique 不调用 std::sort?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 生成"unique"矩阵
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 我对 std::unique(算法)C++有问题
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++中的指针否定 (!ptr == NULL)
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误