Конечно, как глупо с моей стороны. Вы правы на обоих счетах. Позвольте мне исправить это в вопросе, чтобы читатели не учились на моем ошибочном примере.

льно ли использовать следующий фрагмент для определения всех других сгенерированных методов и конструкторов для класса?

struct Picture {

  // 'explicit': no accidental cast from string to Picture
  explicit Picture(const string &filename) { /* load image from file */ }

  // no accidental construction, i.e. temporaries and the like
  Picture() = delete;

  // no copy
  Picture(const Picture&) = delete;

  // no assign
  Picture& operator=(const Picture&) = delete;

  // no move
  Picture(Picture&&) = delete;

  // no move-assign
  Picture& operator=(Picture&&) = delete; // return type correct?
};

Это удаляет каждую реализацию компилятора по умолчанию и оставляет только деструктор, верно? Думаю, без него класс был бы (почти) непригодным, но я бы тоже мог его удалить, правильно?

Тип возвратаPicture& движения-назначенияoperator=(Picture&&) верный? Имеет ли это значение, если я написалPicture&& для типа возврата?