DECLARACION DE UN PUNTERO %oda variable tiene direcci"n! incluso sin conocerla es posible guardarla en un puntero
int & p'ble ( )# ** puntero iniciali+ado con valor )
PUNTEROS
Los punteros siempre deben iniciali+arse.
,quellos punteros que son iniciali+ados con
un valor igual a cero -).! se denominan punteros /0LL.
,quellos punteros que no sean iniciali+ados a
ningn valor se denominan 12ild pointer3! y son extremadamente peligrss pues pueden estar apuntando a cualquier cosa.
PUNTEROS unsigned short int edad ( 4)# ** creacion de variable unsigned short int & pEdad ( )# ** creaci"n de puntero . . . pEdad ( edad# ** asignando la direcci"n de edad en ** pEdad cout 55 pEdad# ** imprimiendo la direcci"n guardada ** en pEdad cout 55 &pEdad# ** imprimiento el valor al que apunta ** el puntero
EL OPERADOR ! EN LOS PUNTEROS
Para declarar un puntero es necesario usar el
operador &! $usto despu6s del tipo de ob$eto al que apunta el puntero
short int & pPuntero ( )#
Cuando se desea e7traer el valor al que apunta un
puntero -en ingl6s se denomina 1dereference3. es necesario usar el operador &! $usto antes del nombre del puntero.
pPuntero ( 4 ** asignando 4 al espacio de
** memoria donde apunta ** pPuntero
"PARA #UE SE USAN LOS PUNTEROS$
8anipular datos en el 9ree store -:eap.
,cceder a las variables miembro y m6todos
de las clases
Pasar variables por referencia a las funciones
%&REE STORE' ( %)EAP'
El 9ree Store es un espacio de memoria m*+
grande, donde es posible almacenar informaci"n# solo puede ser manipulado por medio de punteros.
, diferencia que en el Stac;! la memoria
reservada en el 9ree Store no se libera sino hasta que se termina el programa o es liberada manualmente.
TIP- 0sualmente se usan los destructores
para liberar la memoria
%&REE STORE' ( %)EAP'
Para reservar memoria en el :eap es necesariio
usar el comando ne., el cual devuelve la direcci"n donde se reserv" la variable. typedef unsigned short int 0S:<=%# 0S:<=% & pPuntero# pPuntero ( ne2 0S:<=%# *&tambi6n es posible hacerlo todo en una sola l>nea. 0S:<=% & pPuntero ( ne2 0S:<=%# &*
UN POCO MAS DE NE/
Cuando ne2 no pueda crear memoria en el
free store -?la memoria no es ilimitada@.! ne2 lan+a una ex0ep0i1n indicando este fallo! entraremos en datalle mAs adelante...
LIBERANDO LA MEMORIA DEL )EAP
Para liberar la memoria del :E,P se usa el
comando delete sobre el puntero. delete pPuntero#
Es MU2 importante liberar la memoria del
:eap! pues en caso de perder el rastro de los punteros podrAn presentarse 13*gas de memria3
&U4AS DE MEMORIA
Cuando 1se pierde de vista3 la direcci"n o el
puntero que lleva registro del espacio en el :eap! se dice que hubo una fuga de memoria
La memoria desperdiciada por causa de fugas
de memoria! /< podrA liberarse sino hasta que termine el programa.
&U4AS DE MEMORIA
Es muy frecuente que ocurra cuando el
puntero es declarado como variable local -dentro de una funci"n. y luego se sale de 6sta sin antes liberar la memoria.
Es muy comn usar los constructores para
reservar memoria en el heap y los destructores para liberarla
&U4AS DE MEMORIA
?<B<@! reali+ar un delete sobre un puntero
libera la memoria! reali+arlo de nuevo estrellarA el programa. Para que esto no ocurra! as>gnele al puntero el valor de cero DESPU5S de hacer el primer delete.
USO DE OBJETOS EN EL &REE STORE
La asignaci"n de un ob$eto en el :eap es
igual que la asignaci"n de cualquier otro tipo Cato & pPelusa ( ne2 Cato# *&Este comando crearA un ob$eto tipo Cato en el :eap! llamando su contructor&*
ACCEDIENDO A LOS MIEMBROS DE UNA CLASE **Las siguientes lineas hacen lo mismo -& pCat..numeroPatas-.# pCatDEnumeroPatas-.#
APUNTADORES COMO DATOS MIEMBRO
%odas las variables pueden ser declaradas
para que habiten en el :eap! incluso las variables miembro de los ob$etos.
EL PUNTERO %t6is'
%odas las clases tienen un puntero escondido
denominado 1this3! el cual apunta sobre la direcci"n del ob$eto en cuesti"n.
/o hay necesidad de preocuparse de la
creaci"n ni el borrado de este puntero! pues el compilador se encarga de esto.
USO DE PUNTEROS CONSTANTES
const int & p0no# ** El valor al que apunta p0no no
** puede ser modificad
int & const pFos# ** El valor de direcci"n no puede ser
** modificada
Const int & const p%res# ** ni el valor de la direcci"n! ni el
** valor al que apunta p%res ** puede ser modificado
USO DE PUNTEROS CONSTANTES
Cuando un puntero es declarado para que
apunte a un ob$eto constante! solo podrA acceder a los m6todos constantes de dicho ob$eto.