Код
Ниже приведена уменьшенная реализация класса, с которым у меня возникают проблемы:
class Dummy{
public:
Dummy();
~Dummy();
void addItem(std::unique_ptr<Type>&& item);
private:
QVector<std::unique_ptr<Type>> collection;
}
Type
, приведенный во фрагменте кода выше, является другим классом, которыйподдерживает семантику перемещения.Вот реализация addItem
члена:
void Dummy::addItem(std::unique_ptr<Type>&& item){
if((std::find(collection.begin(), collection.end(), item) == colection.end()){
collection.push_back(std::move(item));
}
}
Я использую класс Dummy
следующим образом:
Dummy myDummy;
std::unique_ptr<Type> item(new Type());
myDummy.addItem(sdt::move(item));
Проблема
Компилятор сообщаетследующее:
required from 'QVector<T>::iterator QVector<T>::begin()'
required from here
use of deleted function 'std::unique_ptr<_Tp,_Dp>::unique_ptr(const std::unique_ptr<_Tp,_Dp>&)'
Означает ли это, что я не могу выполнить итерацию с предоставленными итераторами над QVector<std::unique_ptr<Type>>
и, следовательно, не могу использовать std::find
, предоставленный заголовком алгоритма?
Я мог бы использовать базу диапазонадля for(auto const& other : collection)
и реализовать оператор равенства для Type
, чтобы получить поведение от std::find
.
Я не могу понять, где пример идет не так.