Необходимо перенести объект типа std::unique_ptr из вектора в дек.
Пример кода
using UPtr = std::unique_ptr
std::deque
for (int i = 0; i < 5; ++i) {
v.emplace_back(new int(i));
}
for (const auto& item : v) {
d.emplace_front(std::move(item));
}
Но неожиданно возникает ошибка компиляции:
error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete
Насколько я понимаю, должен использоваться перемещающий конструктор, а не копирующий, но этого не происходит.
Ответ
Проблема оказалась в квалификаторе const
В цикле
for (const auto& item : v) {
d.emplace_front(std::move(item));
}
переменная item имеет тип const std::unique_ptr
Похожая ошибка рассмотрена у Скотта Мейерса в книге "Эффективный и современный C++" в разделе 5.1.
Комментариев нет:
Отправить комментарий