home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / IDIOMS.ZIP / 9-2.C < prev    next >
C/C++ Source or Header  |  1991-12-04  |  1KB  |  40 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 "k.h"       // from above
  7.  
  8. #include "9-3.h"     // for Envelope member functions
  9.  
  10. extern Thing *envelope, *letter; // exemplar pointers
  11.  
  12. class Envelope: public Top {     // Top defined in k.h
  13. public:
  14.     Letter *operator->() const { // forwards all operations
  15.         return rep;              // to rep
  16.     }
  17.     Envelope()    { rep = letter->make(); }
  18.     Envelope(Letter&);
  19.     ~Envelope() {
  20.         if (rep && rep->deref() <= 0) delete rep;
  21.     }
  22.     Envelope(Envelope& x) {
  23.         (rep = x.rep)->ref();
  24.     }
  25.     Envelope& operator=(Envelope& x) {
  26.         if (rep != x.rep) {
  27.             if (rep && rep->deref() <= 0) delete rep;
  28.             (rep = x.rep)->ref();
  29.         }
  30.         return *this;
  31.     }
  32.     Thing *type() { return envelope; }
  33. private:
  34.     static void *operator new(size_t) {
  35.         Sys_Error("heap Envelope");
  36.     }
  37.     static void operator delete(void *) { }
  38.     Letter *rep;
  39. };
  40.