Foros del Web » Programación para mayores de 30 ;) » C/C++ »

relacion struct operador new asignar

Estas en el tema de relacion struct operador new asignar en el foro de C/C++ en Foros del Web. hola todo bien , tengo una duda, por ejemplo yo creo una estructura, en c.... struct agenda { char nombre[25]; char apellido[25]; int edad; int ...
  #1 (permalink)  
Antiguo 28/06/2012, 21:37
 
Fecha de Ingreso: junio-2010
Mensajes: 752
Antigüedad: 14 años, 5 meses
Puntos: 5
relacion struct operador new asignar

hola todo bien , tengo una duda, por ejemplo yo creo una estructura, en c....

struct agenda
{
char nombre[25];
char apellido[25];
int edad;
int dni;
};


y si yo quiero crear una estructura , de este tipo.. esta bien hacer ..

ya en el codigo , creo una estructura de este tipo para usarla...

struct agenda nuevaagenda;

de esta manera tengo la estructura nuevaagenda del tipo agenda...

bien, entonces, para que me sirve NEW? si me sirve esto de crear con el otro metodo.... creo saber para que , pero me gustaria que me corrijan ,.,.


----- se usa NEW , para crear estructuras, con punteros o no. (pilas colas o lista)
que se crearan en tiempo de ejecicion , se las puede borrar, para eso se utiliza,

esa es la diferencia ?=



saludos ...
  #2 (permalink)  
Antiguo 28/06/2012, 23:36
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 10 meses
Puntos: 94
Respuesta: relacion struct operador new asignar

Cita:
se usa NEW , para crear estructuras, con punteros o no. (pilas colas o lista)
que se crearan en tiempo de ejecicion , se las puede borrar, para eso se utiliza,
mas o menos es asi, pero como lo decis pareciera q no te gusta mucho el tema... asignar memoria en tiempo de ejecucion te permite muchas cosas, imaginate hacer una lista con estructuras estaticas sin saber la cantidad de ingresos; vas a tener que declarar un arreglo con N elementos(siendo N un numero muy grande) para que despues solo se ingresen 2 registros, no tiene mucho sentido... tambien podes crear arreglos, matrices... con new


Saludos
  #3 (permalink)  
Antiguo 29/06/2012, 07:14
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: relacion struct operador new asignar

lo que hace el operador new, es decirle al sistema operativo que reserve memoria de X tamaño para ser usada por tu programa, el SO va a evaluar si esta disponible esa cantidad de memoria y si es asi, la va a reservar para el programa y le va a decir a este la posicion de memoria que se reservo para el.... es mas o menos asi, nunca me lei la teoria :)

ahora, si haces esto:

Código C++:
Ver original
  1. struct agenda
  2.  {
  3.  char nombre[25];
  4.  char apellido[25];
  5.  int edad;
  6.  int dni;
  7.  };
  8.  
  9. ...
  10. //dentro de alguna funcion o de main
  11.  
  12. agenda *nueva_agenda; //declaramos un puntero a agenda
  13. nueva_agenda= new agenda(); //le asignamos al puntero una direccion de memoria
  14. ...
  15.  
  16. //tambien se puede hacer en una sola linea
  17. agenda *nueva_agenda= new agenda();

en el codigo anterior, el programa, le solicita al SO que le reserve memoria del tamaño del struct, si se pudo hacer, el SO operativo le devolvera esta direccion de memoria al programa, y este ultimo se la asignara al puntero nueva_agenda. Con este puntero vas a poder manipular la direccion de memoria que se te asigno y cuando ya no la necesites mas haces free nueva_agenda;, para liberar la memoria y asi el sistema operativo la pueda usar nuevamente.

entonces, podriamos hacer lo siguiente:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. struct agenda
  6.     {
  7.         char nombre[25];
  8.         char apellido[25];
  9.         int edad;
  10.         int dni;
  11.     };
  12.  
  13. int main(int argc, char *argv[]) {
  14.  
  15.    
  16.     agenda *nueva_agenda= new agenda();
  17.    
  18.     nueva_agenda->edad= 10;
  19.     nueva_agenda->dni= 43000758;
  20.    
  21.     strcpy(nueva_agenda->nombre, "eutanacio");
  22.     strcpy(nueva_agenda->apellido, "dritz");
  23.    
  24.    
  25.     cout<< "el nombre es: "<< nueva_agenda->nombre;
  26.     cout<<endl<< "el apellido es: "<< nueva_agenda->apellido;
  27.     cout<<endl<< "la edad es: "<<nueva_agenda->edad;
  28.     cout<<endl<< "el dni es: "<<nueva_agenda->dni;
  29.    
  30.               free nueva_agenda; //liberamos la memoria utilizada por el puntero
  31.  
  32.     return 0;
  33. }


tambien se utilizan para el ejemplo que te dio cesar y muchos mas, todo depende de la necesidad del programa

saludos
  #4 (permalink)  
Antiguo 29/06/2012, 08:54
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: relacion struct operador new asignar

Basicamente hay dos tipos de memoria. Cuando declaras una variable en una funcion esta perdura hasta que termina la funcion. Por eso si haces un

strutct agenda d;

en una funcion despues no podes devolver un puntero a la estructura porque se pierde.

Para evitar esto lo que se hace es usar el operador new que reserva memoria en otra parte. La cual no se pierde. Solo se pierde cuando vos decidis.

Si te interesa mas de este tema deberias aprender un poco mas de arquitectura del computador. Sino basicamente creenos! Je Je
  #5 (permalink)  
Antiguo 29/06/2012, 10:24
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: relacion struct operador new asignar

Código C++:
Ver original
  1. agenda *nueva_agenda= new agenda();
  2.  
  3.     free nueva_agenda; //liberamos la memoria utilizada por el puntero

Una pequeña puntualización (:D) a lo que dijo Starfix:

Tengo entendido que en un programa C++ no deben mezclarse new/delete con malloc/free.
  #6 (permalink)  
Antiguo 29/06/2012, 11:58
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: relacion struct operador new asignar

perdon, era delete lo que uso, me re confundi jeje

Etiquetas: int, operador, relacion, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:12.