¿El siguiente snipplet es correcto para des-definir todos los métodos y constructores generados para una clase?Uso correcto de `= delete` para métodos en las clases
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 del compilador predeterminado y solo abandona el destructor, ¿verdad? Sin eso, la clase sería (casi) inservible, supongo, pero podría eliminarla también, ¿correcto?
¿El tipo de retorno Picture&
del movimiento-asigne operator=(Picture&&)
correcto? ¿Hace una diferencia si escribí Picture&&
para el tipo de devolución?
Parece que C++ realmente ha cambiado mucho en C++ 0x !, algo interesante. – briantyler
es una sintaxis más clara que la práctica común de ocultar esos métodos en una sección 'privada', y solo * declarando * pero no * definiendo * ellos. – towi