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ê?

questionAnswers(6)

yourAnswerToTheQuestion