将unique_ptrs从一个向量移动到另一个向量

时间:2011-04-26 15:32:18

标签: c++ c++11 move-semantics unique-ptr

我想将存储在未分类矢量中的unique_ptr移动到另一个矢量,该矢量将包含指针的排序矢量。

肯定移动unique_ptr不会自动删除第一个向量中的元素?我怎么能这样做?

我想做的例子:

std::vector<std::unique_ptr<T> > unsorted, sorted;
// fill the "unsorted" vector
while( unsorted.size() > 0 )
{
    const auto it = find_next_element_to_add_to_sorted(unsorted);
    sorted.push_back( std::move(*it) );
}

我希望意图明确。

更新my algorithm不允许就地排序。如果今天有人感觉很好(我没有问,请参阅上面的问题),请随意为这种情况实施并告诉我。我真的需要“按移动排序”。而且我真的不明白为什么移动会 更加昂贵。

1 个答案:

答案 0 :(得分:16)

你的代码对我来说基本上是正确的,除了它似乎就像你打算从未分类的向量中删除被移动的unique_ptr一样:

std::vector<std::unique_ptr<T> > unsorted, sorted;
// fill the "unsorted" vector
while( unsorted.size() > 0 )
{
    const auto it = find_next_element_to_add_to_sorted(unsorted);
    sorted.push_back( std::move(*it) );
    unsorted.erase(it);
}

移动后it引用移动的unique_ptr*it == nullptr。它仍然存在于unsorted中,如果不需要,则必须明确删除。