A veces es necesario prohibir un constructor de copia en una clase de C++ para que la clase se convierta en "no copiable". Por supuesto, operator=
debe prohibirse al mismo tiempo.¿Cuál es la forma más confiable de prohibir un constructor de copia en C++?
Hasta ahora he visto dos formas de hacerlo. Vía 1 es declarar el método privado y darle ninguna aplicación:
class Class {
//useful stuff, then
private:
Class(const Class&); //not implemented anywhere
void operator=(const Class&); //not implemented anywhere
};
modo 2 es declarar el método privado y darle aplicación "vacío":
class Class {
//useful stuff, then
private:
Class(const Class&) {}
void operator=(const Class&) {}
};
OMI el primero es mejor - incluso si hay alguna razón inesperada que conduzca al llamado al constructor de copia desde la misma función de miembro de la clase, habrá un error de enlazador más adelante. En el segundo caso, este escenario no se detectará 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é?
http://www.boost.org/doc/libs/1_46_1/boost/noncopyable.hpp – dgnorton