entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Por ejemplo, imaginemos que tengo lo siguiente:

class contenedor
{
public:
      contenedor(void) : dato(0) {}
      contenedor(const contenedor& obj) : dato(obj.dato)  {}
      contenedor* clone(void) { return new contenedor(*this);    } 
      virtual ~contenedor(void); {}
private:
    int dato;
}

class tontoron
{
public
     tontoron(void) : puntero(nullptr) { }
     tontoron(const tontoron& obj) 
     {
       puntero = obj.puntero->clone();
     }
     virtual ~contenedor(void) { delete puntero }
     void init()  {  puntero = new contenedor();     }
 private:
      contenedor *puntero;
 }

El constructor de copia de la clase tontoron ¿debería simplemente copiar la dirección del puntero o clonarlo(crear un nuevo bloque de memoria y copiar el contenido del puntero)?

1 Respuesta

0voto

white Puntos75820

en la clase contenedor, el constructor no puede ser virtual.

Creo que es cuestion de performance si no me equivoco, depende que requieras hacer. ejm: suponiendo que quieres evitar que el objeto original sea modificado podrias clonarlo asi tendrias otro para modificar, depende tambien la cantidad de objetos clonados, esto podria impactar en la memoria.

0voto

juansolo comentado

Hola @white acabo de editar la pregunta porque no escribí bien el destructor.

Aún no lo tengo claro pero creo que en estos casos siempre hay que realizar una copia profunda por lo siguiente:

  • Se trata de un constructor de copia que debe copiar el objeto especificado por parámetro.
  • y la clase tontoron es la responsable de darle un valor inicial al puntero.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta