home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / C++-7 / DISK4 / SAMPLES / CPPTUTOR / NEWDEL3.CP$ / NEWDEL3
Encoding:
Text File  |  1991-12-12  |  1.4 KB  |  63 lines

  1. // NEWDEL3.CPP
  2.  
  3. // This is an example program from Chapter 6 of the C++ Tutorial. This
  4. //     program demonstrates class-specific new and delete operators.
  5.  
  6. #include <iostream.h>
  7. #include <string.h>
  8. #include <stddef.h>
  9.  
  10. const int MAXNAMES = 100;
  11.  
  12. class Name
  13. {
  14. public:
  15.    Name( const char *s ) { strncpy( name, s, 25 ); }
  16.    void display() const { cout << '\n' << name; }
  17.    void *operator new( size_t size );
  18.    void operator delete( void *ptr );
  19.    ~Name() {};    // do-nothing destructor
  20. private:
  21.    char name[25];
  22. };
  23.  
  24. // -------- Simple memory pool to handle fixed number of Names
  25. char pool[MAXNAMES] [sizeof( Name )];
  26. int inuse[MAXNAMES];
  27.  
  28. // -------- Overloaded new operator for the Name class
  29. void *Name::operator new( size_t size )
  30. {
  31.     for( int p = 0; p < MAXNAMES; p++ )
  32.         if( !inuse[p] )
  33.         {
  34.             inuse[p] = 1;
  35.             return pool + p;
  36.         }
  37.     return 0;
  38. }
  39.  
  40. // --------- Overloaded delete operator for the Names class
  41. void Name::operator delete( void *ptr )
  42. {
  43.     inuse[((char *)ptr - pool[0]) / sizeof( Name )] = 0;
  44. }
  45.  
  46. void main()
  47. {
  48.     Name *directory[MAXNAMES];
  49.     char name[25];
  50.  
  51.     for( int i = 0; i < MAXNAMES; i++ )
  52.     {
  53.         cout << "\nEnter name # " << i+1 << ": ";
  54.         cin >> name;
  55.         directory[i] = new Name( name );
  56.     }
  57.     for( i = 0; i < MAXNAMES; i++ )
  58.     {
  59.         directory[i]->display();
  60.         delete directory[i];
  61.     }
  62. }
  63.