[C con Clase] constructor de copia

Salvador Pozo salvador en conclase.net
Mie Jun 26 13:33:10 CEST 2013


Hola:

Para completar la respuesta anterior.

J> Hola, tengo una duda sobre el constructor de copia, ¿cuando hay que
J> utilizarlo o recomendable?, si puede ser con un pequeño ejemplo pues mejor.

No es tanto un problema de cuándo usarlo como de cuándo hay que definirlo.

El compilador siempre crea un constructor copia por defecto para cada clase. Se trata de lo que se denomina un constructor copia trivial, porque sólo copia los valores de los datos miembro.

Por otra parte, los programas usan a menudo los constructores copia de forma implícita, sin que el programador lo diga directamente, y a menudo sin que ni siquiera se de cuenta.

Por ejemplo, cuando se pasa un objeto como parámetro a una función por valor (es decir, por copia), se usa el constructor copia de forma automática.

Otro ejemplo, cuando se retorna un objeto local en una función, salvo que haya optimizaciones, también se invoca al constructor copia.

Por lo tanto, el constructor copia hay que definirlo siempre que el constructor copia trivial no sea adecuado.

Esta es una regla demasiado general para lo que tu preguntas, así que intentaré ser más concreto.

La primera regla con el constructor copia es que hay que definirlo siempre que algún dato miembro de la clase sea un puntero. Y más generalmente, cuando una copia directa no sea suficiente. Por ejemplo, si uno de los datos miembros de la clase es un fichero, probablemente también haya que definir el constructor copia.

Hay muchas situaciones posibles, por lo que tendrás que analizar cada clase que diseñes para ver si el constructor copia por defecto es válido o no, y en ese caso, definir tu propia versión.

No es una opción hacerlo sólo si usas el constructor copia de forma explícita, recuerda que el compilador puede invocarlo de forma automática en muchos casos.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net


Más información sobre la lista de distribución Cconclase