Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: astroman20 en 11 Agosto 2017, 04:57 am



Título: Pointers.duda
Publicado por: astroman20 en 11 Agosto 2017, 04:57 am
Alguien me puede decir concretamente para que son los punteros, hasta ahora he hecho pseudocodiguillos sin necesidad de los punteros, creo que mi pregunta se dirige mas al uso practico de ellos, y si es posible que me den ejemplos no muy complejos, ya que ya se la definicion correcta, pero cuando los utilizo siempre tengo problemas de compilacion. :rolleyes: se que es tonto pero no se si pueda seguir programando sin usarlos...


Título: Re: Pointers.duda
Publicado por: ivancea96 en 11 Agosto 2017, 12:25 pm
Un ejemplo simple: Para trabajar con memoria dinámica, trabajas con punteros, pues es lo que necesitas: un puntero a un bloque de memoria.

Luego, en C++, hay constructores, constructores de copia, constructores de movimiento y destructores. Estas funciones no las llamas tú; se llaman solas en el momento adecuado. Utilizando punteros, evitas llamar, por ejemplo, constructores de copia. Además, como el puntero puede no apuntar a un objeto, tienes la posibilidad de construir el objeto en el momento justo en el que lo necesites.

Imaginate un array de 5 elementos:
Código
  1. Obj *array = new Obj[5];

Esos 5 elementos han sido construidos. Imagina ahora que quieres incrementar a 6 el tamaño. Tienes que mover o copiar uno a uno los elementos. Mover es algo relativamente rápido. Pero copiar puede ser muy pesado, y no todas las clases se pueden mover. Una opción aquí, es guardar un array de punteros:
Código
  1. Obj **array = new Obj*[5];
  2.  
  3. for(int i=0; i<5; i++){
  4.    array[i] = new Obj();
  5. }

Así, cuando se crea el nuevo array de 6 elementos, solo vas a tener que copiar los punteros (que no son más que números), y evitas copiar todos los objetos. La diferencia de rendimiento es muy grande.

En cualquier caso, no te preocupes. ya encontrarás el momento para usarlos cuando los necesites.

Así como detalle, una lista enlazada, ¿cómo la harías?