home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / listpm4.zip / source / OneOf.hpp < prev    next >
C/C++ Source or Header  |  1998-04-22  |  2KB  |  60 lines

  1. /*
  2.     listPM list files under Presentation Manager. Uses Open Class Libarary.
  3.     Copyright (C) 1998  Paul Elliott
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19.     Paul Elliott
  20.     11900 Metric Blvd #J-181
  21.     Austin Tx 78758-3117
  22.     pelliott@io.com
  23. */
  24. #ifndef ONEOF
  25. #define ONEOF
  26.  
  27.  
  28. // class template to allocate One of a given object, which must have
  29. // default constructor which is used to allocate.
  30. // the one object is created when the first reference is
  31. // gotten. Destroyed when the template class is destroyed.
  32. // this class should be used when you want 1 object, but it
  33. // can not be constructed at initialization time( by being a global or
  34. // static object) , because proper context is not set up yet or initialization
  35. // order problems.
  36. template <class object>
  37. class OneOf
  38. // One of this object.
  39. {
  40.      private:
  41.          // pointer to the one object.
  42.          object *     pointer;
  43.      public:
  44.          // the one object must be destroyed once.
  45.          // C++ says delete 0 is OK!
  46.          ~OneOf() { delete pointer; pointer =0; };
  47.          // not initialized immeadiately.
  48.          OneOf() : pointer(0) {};
  49.  
  50.          // return a reference to the one object
  51.          // construct if first.
  52.          operator object& ()
  53.          {
  54.                if ( pointer == 0) pointer = new object;
  55.  
  56.                return *pointer;
  57.          };
  58. };
  59. #endif   // ONEOF
  60.