home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / listpm7.zip / OneOf.hpp < prev    next >
C/C++ Source or Header  |  1999-06-12  |  2KB  |  61 lines

  1. /*
  2.     listPM list files under Presentation Manager. Uses Open Class Libarary.
  3.     Copyright (C) 1998,1999  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.     PMB 181
  21.     11900 Metric Blvd Ste. J
  22.     Austin Tx 78758-3117
  23.     pelliott@io.com
  24. */
  25. #ifndef ONEOF
  26. #define ONEOF
  27.  
  28.  
  29. // class template to allocate One of a given object, which must have
  30. // default constructor which is used to allocate.
  31. // the one object is created when the first reference is
  32. // gotten. Destroyed when the template class is destroyed.
  33. // this class should be used when you want 1 object, but it
  34. // can not be constructed at initialization time( by being a global or
  35. // static object) , because proper context is not set up yet or initialization
  36. // order problems.
  37. template <class object>
  38. class OneOf
  39. // One of this object.
  40. {
  41.      private:
  42.          // pointer to the one object.
  43.          object *     pointer;
  44.      public:
  45.          // the one object must be destroyed once.
  46.          // C++ says delete 0 is OK!
  47.          ~OneOf() { delete pointer; pointer =0; };
  48.          // not initialized immeadiately.
  49.          OneOf() : pointer(0) {};
  50.  
  51.          // return a reference to the one object
  52.          // construct if first.
  53.          operator object& ()
  54.          {
  55.                if ( pointer == 0) pointer = new object;
  56.  
  57.                return *pointer;
  58.          };
  59. };
  60. #endif   // ONEOF
  61.