Programadores => General Programadores => Mensaje iniciado por: player en 23 de Agosto de 2010, 03:33:19 pm

Título: Duda con punteros
Publicado por: player en 23 de Agosto de 2010, 03:33:19 pm
Tengo una pequeña duda con un puntero a ver si me la podéis aclarar.

Tengo una clase con un doble puntero "pt1" en la parte privada para crear una matriz.

También tengo un método CrearMatriz para crear la matriz.

Dentro del método CrearMatriz, defino otro doble puntero como auxiliar "ptAux" y con este reservo la memoria de forma dinámica.

Si he podido reservar bien la memoria, lo que hago es hacer que pt1 apunte a la misma dirección de memoria que ptAux haciendo pt1 = ptAux.

Ahora aquí vienen mis dudas:

Lo que hago de pt1 = ptAux es correcto?

Y ahora para eliminar el puntero ptAux y que sólo pt1 apunte a esas direcciones de memoria, si hiciera un delete de ptAux elemento a elemento, me estaría cargando la matriz no? Y pt1 ya no apuntaría a nada.

Simplemente al salir del método, la variable puntero ptAux se destruirá al salir de su ámbito y ya sólo pt1 estaría apuntado ahí?

Gracias.
Título: Re: Duda con punteros
Publicado por: Sante en 23 de Agosto de 2010, 07:44:22 pm
Es correcto. Los punteros son como cualquier otra variable, y se eliminan al salir de su ámbito. Al hacer Delete lo que haces es liberar la memoria a la que apunta el puntero, y no la de la variable en sí. La asignación también es correcta, al hacer pt1 = ptAux estás copiando la dirección de memoria a la que apunta ptAux, y haciendo que pt1 apunte a esa misma dirección.

Un error muy común en principiantes es el confundir la asignación de punteros como la anterior con la copia física de la memoria a la que apuntan. Esto suele ocurrir por ejemplo si tenemos una clase o estructura con un puntero como miembro, y la copiamos. El programador principiante puede olvidar que el puntero de la clase copia apunta a la misma dirección física que la clase original, y que cuando esta (la original) se borre, el puntero de la clase copia dejará también de ser válido.

Una forma de visualizarlo es ver los punteros como índices de un libro. Que copies el índice de un libro no significa que estés copiando su contenido, y si destruyes el libro original, el nuevo índice ya no vale para nada.
Título: Re: Duda con punteros
Publicado por: player en 23 de Agosto de 2010, 10:18:47 pm
Muchas gracias por la aclaración Sante, me ha quedado claro.

Saludos.