Uso correcto de `= delete` para métodos en clases
Es correcto el siguiente snipplet para anular la definición de todos los métodos y constructores generados para una clase?
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?
};
Esto elimina todas las implementaciones predeterminadas del compilador y solo deja el destructor, ¿verdad? Sin ella, la clase sería (casi) inutilizable, supongo, pero también podría eliminarla, ¿correcto?
Es el tipo de retornoPicture&
de mover-asignaroperator=(Picture&&)
correcto? ¿Hay alguna diferencia si escribíPicture&&
para el tipo de devolución?