Учитывая std::vector<std::unique_ptr<SomeType> >
, можно ли использовать
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
.)