鑑於std::vector<std::unique_ptr<SomeType> >
,對其使用 remove_if
是否合法?換句話說,鑑於此代碼:你可以在`std :: unique_ptr`的容器上使用`std :: remove_if`嗎?
std::vector<std::unique_ptr<SomeType> > v;
// fill v, all entries point to a valid instance of SomeType...
v.erase(std::remove_if(v.begin(), v.end(), someCondition), v.end());
,我會擦除所有的指針還在v
是 有效後保證。我知道,考慮到直觀實現 std::remove_if
,並給予我所看到的所有實現, 他們將。我想知道是否有任何標準 保證它;即std::remove_if
不允許複製 任何有效條目而不將該副本重新複製到其最終的 位置。
(我是,當然,假設條件不復制如果 條件具有類似特徵:
struct Condition
{
bool operator()(std::unique_ptr<SomeType> ptr) const;
};
,那麼當然,所有的指針將是 後無效remove_if
)
James Kanze提出問題 - 一個非常罕見的現象! – Nawaz
'unique_ptr'不是可複製的,所以如果你使用了這個謂詞,你的代碼就不會編譯。 – interjay
爲什麼不呢? 'std :: unique'不可複製,但可移動。它可以移動到容器的末端。 –