Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/12/2013, 06:08
vosk
 
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