Item 49: Understand the behavior of the new-handler(Effective C++)

it2022-05-08  8

set_new_handler allows you to specify a function to be called when memory allocation requests cannot be satisfied.    Nothrow new is of limited utility, because it applies only to memory allocation; subsequent constructor calls may still throw exceptions.

 1  #include  < iostream >  2  using   namespace  std;  3   4  class  Foo  5  {  6  public :  7      Foo(){}  8       static  new_handler set_new_handler(new_handler p)  throw ();  9       void *   operator   new (size_t size); 10  private : 11       static  new_handler currentHandler; 12  }; 13  14  new_handler Foo::currentHandler  =   0 ; 15  16  void *  Foo:: operator   new (size_t size) 17  { 18       throw  bad_alloc(); 19  } 20  21  new_handler Foo::set_new_handler(new_handler p)  throw () 22  { 23       // new_handler oldHandler = currentHandler; 24       // currentHandler = p; 25      std::set_new_handler(p); 26       return  p; 27       // return oldHandler; 28  } 29  30  void  outOfMem() 31  { 32      cout  <<   " out of memory "   <<  endl; 33  } 34  35  int  main() 36  { 37      set_new_handler(outOfMem); 38      cout  <<   " Attempting to allocate 1 GB... " ; 39       char *  p  =   new   char  [ 1024 * 1024 * 1024 * 1024 * 1024 ]; 40      cout  <<   " Ok\n " ; 41      delete[] p; 42      cin. get (); 43       return   0 ; 44  }

转载于:https://www.cnblogs.com/zhtf2014/archive/2011/04/09/2010691.html


最新回复(0)