在集合之间移动“ unique_ptr”

Move `unique_ptr`s between sets

本文关键字:ptr unique 集合 之间 移动      更新时间:2023-10-16

我有两组和一个迭代器, a的元素:

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

我想从a中删除iter指向的元素,然后将其插入b。是否可以?如何?

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

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

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