Является ли следующая snipplet правильной для un-define всех иначе сгенерированных методов и конструкторов для класса?
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&
для параметра move-assign operator=(Picture&&)
? Это имеет значение, если я написал Picture&&
для возвращаемого типа?