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

[SOLUCIONADO] nothrow dynamic memory

Estas en el tema de nothrow dynamic memory en el foro de C/C++ en Foros del Web. Que tal ,de casualidad alguien sabrá para que sirve el "nothrow" en lo que es la asignación de memoria dinámica en C++...
  #1 (permalink)  
Antiguo 21/12/2013, 18:40
Avatar de bgab7  
Fecha de Ingreso: agosto-2013
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta nothrow dynamic memory

Que tal ,de casualidad alguien sabrá para que sirve el "nothrow" en lo que es la asignación de memoria dinámica en C++
  #2 (permalink)  
Antiguo 22/12/2013, 06:08
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: nothrow dynamic memory

Te permite evaluar el resultado de la reserva de memoria sin usar el try-catch, es como la version en c++ de lo que hacias en c, retorna nulo si no pudo completar la operacion:

Código C:
Ver original
  1. //en C o en c++ sin objetos
  2. void *entero;
  3. if((entero = malloc(sizeof(int)))) {
  4.     //ok, ya tengo memoria para un entero
  5.     free(entero);
  6. }
  7. else {
  8.     //error
  9. }
  10.  
  11. //en c++ contry-catch
  12. void *entero;
  13. try {
  14.     entero = new int;
  15.     //ok ya tengo memoria para el entero
  16.     delete entero;
  17. } catch(bad_alloc ex) {
  18.     //error
  19. }
  20.  
  21.  
  22. //en c++ con nothrow
  23. void *entero;
  24. if((entero = new (nothrow) int)) {
  25.     //ok ya tengo memoria para el entero
  26.     delete entero;
  27. }
  28. else {
  29.     //error
  30. }

Esto es una copia de la referencia de nothrow:

Código C:
Ver original
  1. This constant value is used as an argument for operator new and operator new[] to indicate that these functions shall not throw an exception on failure, but return a null pointer instead.

Es decir, por defecto el operador new no retorna el estado de la reserva de memoria, sino que arroja una excepcion; el nothrow cambia este comportamiento para que retorne nulo en caso de error.

Saludos
vosk
  #3 (permalink)  
Antiguo 22/12/2013, 16:28
Avatar de bgab7  
Fecha de Ingreso: agosto-2013
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: nothrow dynamic memory

Muchisimas gracias, una pregunta si no hay error en la asignacion de memoria dinamica, que es lo que arroja el nothrow?
  #4 (permalink)  
Antiguo 22/12/2013, 17:23
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: nothrow dynamic memory

Si no hay error el nothrow no afecta a la operacion, retorna un puntero a la direccion de memoria recien reservada; el nothrow solo indica al manejador de memoria que en caso de error en vez de arrojar (throw) una excepcion la omita (no throw) y retorne nulo. Si no hay error la funcion funciona exactamente igual que sin nothrow.

Saludos
vosk
  #5 (permalink)  
Antiguo 22/12/2013, 18:24
Avatar de bgab7  
Fecha de Ingreso: agosto-2013
Mensajes: 11
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: nothrow dynamic memory

Gracias vosk! 100% entendido :)

Etiquetas: dynamic, memory
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 21:50.