initializer_list - убийца move семантики
От: rg45 СССР  
Дата: 22.10.18 21:03
Оценка: 19 (5)
Будьте осмотрительны, используя initializer_list для инициализации. Помните, его элементы всегда копируются, а не перемещаются, даже когда вы наполняете его rvalue значениями:

struct MovableNonCopyable
{
  MovableNonCopyable() = default;
  MovableNonCopyable(MovableNonCopyable&&) = default;
};
// . . . 
std::vector<MovableNonCopyable> v { MovableNonCopyable(), MovableNonCopyable(), MovableNonCopyable() };
// error: use of deleted function ‘constexpr MovableNonCopyable::MovableNonCopyable(const MovableNonCopyable&)’
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 22.10.2018 21:04 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.