[C con Clase] sobre constructor de copia

Steven Richard Davidson stevenrichard.davidson en gmail.com
Mar Sep 18 20:40:45 CEST 2007


Hola Pedro,

On 9/18/07, Pedro Mateo <pedromateoa en gmail.com> wrote:
> hola a todos
> tengo una clase en la que el constructor de copia debe estar desactivado.
>
> es decir esta clase no puede ser copiada y si va a pasar como parametro
> dicho parametro tiene que recibirla como una referencia a la instancia
>
> ejemplo
> --------------------------------------------------------------------------
> class prueba{
> }
>
> prueba x;
> prueba y(x); // yo quiero que de error en esta linea y que no me permita
> compilar
>
> ---------------------------------------------------------------------------
>
> hasta ahora solo puedo generar un error en tiempo de ejecucion y mas nada
> pero me gustaria que no me dejara compilar
>

Esto lo puedes hacer modificando el permiso de acceso al constructor
copia. Si estableces que el constructor es privado, entonces nadie
fuera de la definición de la clase puede invocar el constructor. Me
temo que esta regla, como bien sabrás, no aplica a amistades de la
clase 'prueba'. Por ejemplo,

class prueba
{
private:
  prueba( const prueba &ref )  {}

public:
  prueba();
  ...
};

Al intentar hacer lo siguiente,

prueba x;
prueba y = x;

El compilador dará un error ya que la función miembro
'prueba::prueba(const prueba &)'  es privada y al estar fuera del
ámbito de 'prueba', quiebra las reglas semánticas.


Espero que esto te ayude.

Steven




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