elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  El último post el que esta abajo. ->
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: El último post el que esta abajo. ->  (Leído 5,055 veces)
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: El último post el que esta abajo. ->
« Respuesta #10 en: 13 Marzo 2011, 21:30 pm »

En principio, la importancia de sobrecargar el operador de asignación o de realizar un constructor de copia en una clase viene por lo siguiente:

(Dependiendo del compilador, pero en principio)
Si no están definidos, se copia campo a campo.

Problema? Si tienes memoria dinámica, y copias campo a campo, tienes dos punteros apuntando al mismo sitio. La copia es borrada (por ejemplo, pasabas por copia en una función) y con ello se libera la memoria dinámica a la cual apuntaba. Ahora, el original tiene un campo que apunta a un espacio liberado, mala suerte, violación de segmento cuando accedas y fin del programa.

Solución? constructores de copia y sobrecarga de operadores de asignación, para en caso que tu clase trabaje con memoria dinámica, replicar dicha memoria de forma manual, y no copiando el puntero. (por ejemplo, volviendo a declarar un vector y copiando todos los elementos manualmente, en vez que el compilador simplemente te copie el puntero).


En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines