home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 13 / CDA13.ISO / cdactual / demobin / share / program / C / ANSICPP.ZIP / EX03008.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1990-07-24  |  765 b   |  42 lines

  1. // ex03008.cpp
  2. // Home-brew new and delete with a _new_handler
  3. #include <iostream.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <stddef.h>
  7.  
  8. static void all_gone()
  9. {
  10.     cerr << "\n\aThe free store is empty\n";
  11.     exit(1);
  12. }
  13.  
  14. extern void (*_new_handler)();
  15.  
  16. // ------------- overloaded new operator
  17. static void *operator new(size_t size)
  18. {
  19.     void *rtn;
  20.     while((rtn = malloc(size)) == NULL)
  21.         if (_new_handler != NULL)
  22.             (*_new_handler)();
  23.         else
  24.             break;
  25.     memset(rtn, '\0', size);
  26.     return rtn;
  27. }
  28.  
  29. // ----------- overloaded delete operator
  30. void operator delete(void *type)
  31. {
  32.     free(type);
  33. }
  34.  
  35. main()
  36. {
  37.     _new_handler = all_gone;
  38.     // ----- now get more than exists
  39.     char *ip1 = new char[50000];
  40.     char *ip2 = new char[50000];
  41. }
  42.