¿Cuál es la forma más confiable de prohibir un constructor de copias en C ++?

A veces es necesario prohibir un constructor de copia en una clase C ++ para que esa clase se vuelva "no copiable". Por supuesto,operator= debería estar prohibido al mismo tiempo.

Hasta ahora he visto dos formas de hacerlo. La forma 1 es declarar el método privado y no implementarlo:

class Class {
//useful stuff, then
private:
    Class( const Class& ); //not implemented anywhere
    void operator=( const Class& ); //not implemented anywhere
};

Way 2 es declarar el método privado y darle una implementación "vacía":

class Class {
//useful stuff, then
private:
    Class( const Class& ) {}
    void operator=( const Class& ) {}
};

IMO, el primero es mejor, incluso si hay alguna razón inesperada que provoque que se llame al constructor de la copia desde la misma función de miembro de clase, habrá un error de enlazador más adelante. En el segundo caso, este escenario pasará desapercibido hasta el tiempo de ejecución.

¿Hay algún inconveniente serio en el primer método? ¿Cuál es una mejor manera si hay alguna y por qué?

Respuestas a la pregunta(6)

Su respuesta a la pregunta