home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / IDIOMS.ZIP / 3-15.C < prev    next >
C/C++ Source or Header  |  1991-12-04  |  1KB  |  35 lines

  1. /* Copyright (c) 1992 by AT&T Bell Laboratories. */
  2. /* Advanced C++ Programming Styles and Idioms */
  3. /* James O. Coplien */
  4. /* All rights reserved. */
  5.  
  6. #include "3-14.h"
  7.  
  8. String *String::newlist = 0;
  9.  
  10. void String::operator delete(void *p) {
  11.     String *s = (String *)p;
  12.     s->freepointer = newlist;
  13.     newlist = s;
  14. }
  15.  
  16. void* String::operator new(size_t size) {
  17.     if (size != sizeof(String)) {
  18.         // this check is needed for cases when class
  19.         // derivation is used (Chapter@\*(cE) and the
  20.         // derived class has no operator new.
  21.         // String::operator delete above will field
  22.         // this over-sized block when it is reclaimed.
  23.         return malloc(size);
  24.     } else if (!newlist) {
  25.         newlist = (String *)new char[100 * sizeof(String)];
  26.         for (int i = 0; i < 99; i++) {
  27.             newlist[i].freepointer = &(newlist[i+1]);
  28.         }
  29.         newlist[i].freepointer =0;
  30.     }
  31.     String *savenew = newlist;
  32.     newlist = newlist->freepointer;
  33.     return savenew;
  34. }
  35.