在集之间移动`unique_ptr`

时间:2015-05-05 09:08:32

标签: c++ containers unique-ptr

我有两个集合和一个a元素的迭代器:

set<unique_ptr<X>> a, b;
set<unique_ptr<X>>::iterator iter = find something in a;

我想从iter中移除a指向的元素并将其插入b。可能吗?怎么样?

1 个答案:

答案 0 :(得分:2)

好吧,我怀疑没有正常的方法可以做到这一点。但总有一个非正常的:) 您可以执行以下操作:

auto tmp = const_cast<std::unique_ptr<std::string>&&>(*iter);
a.erase(iter);
b.insert(std::move(tmp));

好的,第一行违反set不变量并且它很可怕但据我所知它不应该是一个问题,因为在下一行我们从集合中移除了这个邪恶的节点。