鉴于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'不可复制,但可移动。它可以移动到容器的末端。 –