Qual é a maneira mais confiável de proibir um construtor de cópias em C +
Às vezes é necessário proibir um construtor de cópias em uma classe C ++ para que a classe se torne "não copiável". Claro,operator=
deve ser proibido ao mesmo temp
Até agora, vi duas maneiras de fazer isso. A maneira 1 é declarar o método privado e não dar implementação:
class Class {
//useful stuff, then
private:
Class( const Class& ); //not implemented anywhere
void operator=( const Class& ); //not implemented anywhere
};
@Way 2 é declarar o método privado e dar-lhe implementação "vazia":
class Class {
//useful stuff, then
private:
Class( const Class& ) {}
void operator=( const Class& ) {}
};
IMO, o primeiro é melhor - mesmo que exista algum motivo inesperado que leve o construtor de cópia a ser chamado a partir da mesma função de membro da classe, haverá um erro no vinculador posteriormente. No segundo caso, esse cenário será deixado despercebido até o tempo de execuçã
Existem alguns inconvenientes sérios no primeiro método? Qual é a melhor maneira, se houver, e por quê?