Uso correto de `= delete` para métodos em classes
O snipplet a seguir está correto para cancelar a definição de todos os métodos e construtores gerados de outra forma para uma class
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?
};
Isto exclui todas as implementações padrão do compilador e deixa apenas o destruidor, certo? Sem ela, a classe seria (quase) inutilizável, eu acho, mas eu poderia excluí-la também, correto?
É o tipo de retornoPicture&
do movimento-atribuiroperator=(Picture&&)
correto? Faz alguma diferença se eu escrevessePicture&&
para o tipo de retorno?