home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / CTECHAPP.ZIP / TACTICS.ZIP / DYNAMIC.CPP next >
C/C++ Source or Header  |  1990-03-26  |  1KB  |  67 lines

  1. //  Module:     Dynamic     (Improved Dynamic Memory Allocation)
  2. //  Version:    1.00
  3. //
  4. //  Language:   C++ 2.0
  5. //  Environ:    Any
  6. //
  7. //  Purpose:    Implements an improved memory allocation scheme for C++ by
  8. //              overloading the built-in new and delete operators.
  9. //
  10. //  Written by: Scott Robert Ladd
  11.  
  12. #include "Dynamic.hpp"
  13.  
  14. extern "C"
  15.     {
  16.     #include "stdlib.h"
  17.     }
  18.  
  19. void * operator new (unsigned int size)
  20.     {
  21.     void * temp = malloc(size);
  22.  
  23.     return temp;
  24.     }
  25.  
  26. void operator delete (void * ptr)
  27.     {
  28.     free(ptr);
  29.     }
  30.  
  31. void * _vec_new(
  32.     void *       aptr,
  33.     unsigned int num,
  34.     size_t       size,
  35.     void *       (* ctor)(void *))
  36.     {
  37.     aptr = malloc(num * size);
  38.  
  39.     if ((ctor != NULL) && (aptr != NULL))
  40.         {
  41.         for (unsigned int n = 0; n < num; ++n)
  42.             ctor((char *)aptr + n * size);
  43.         }
  44.  
  45.     return aptr;
  46.     }
  47.  
  48. void _vec_delete(
  49.     void *       aptr,
  50.     unsigned int num,
  51.     size_t       size,
  52.     int          (*dtor)(int, void *),
  53.     int          freeup)
  54.     {
  55.     if (aptr == NULL)
  56.         return;
  57.  
  58.     if (dtor != NULL)
  59.         {
  60.         for (unsigned int n = 0; n < num; ++n)
  61.             dtor(2,(char *)aptr + n * size);
  62.         }
  63.  
  64.     if (freeup)
  65.         free(aptr);
  66.     }
  67.