Конечно, как глупо с моей стороны. Вы правы на обоих счетах. Позвольте мне исправить это в вопросе, чтобы читатели не учились на моем ошибочном примере.
льно ли использовать следующий фрагмент для определения всех других сгенерированных методов и конструкторов для класса?
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&&
для типа возврата?