apt  0.9.12.1
sptr.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: sptr.h,v 1.3 2001/03/11 07:22:19 jgg Exp $
4 /* ######################################################################
5 
6  Trivial non-ref counted 'smart pointer'
7 
8  This is really only good to eliminate
9  {
10  delete Foo;
11  return;
12  }
13 
14  Blocks from functions.
15 
16  I think G++ has become good enough that doing this won't have much
17  code size implications.
18 
19  ##################################################################### */
20  /*}}}*/
21 #ifndef SMART_POINTER_H
22 #define SMART_POINTER_H
23 
24 template <class T>
25 class SPtr
26 {
27  public:
28  T *Ptr;
29 
30  inline T *operator ->() {return Ptr;};
31  inline T &operator *() {return *Ptr;};
32  inline operator T *() {return Ptr;};
33  inline operator void *() {return Ptr;};
34  inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
35  inline void operator =(T *N) {Ptr = N;};
36  inline bool operator ==(T *lhs) const {return Ptr == lhs;};
37  inline bool operator !=(T *lhs) const {return Ptr != lhs;};
38  inline T*Get() {return Ptr;};
39 
40  inline SPtr(T *Ptr) : Ptr(Ptr) {};
41  inline SPtr() : Ptr(0) {};
42  inline ~SPtr() {delete Ptr;};
43 };
44 
45 template <class T>
46 class SPtrArray
47 {
48  public:
49  T *Ptr;
50 
51  //inline T &operator *() {return *Ptr;};
52  inline operator T *() {return Ptr;};
53  inline operator void *() {return Ptr;};
54  inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;};
55  //inline T &operator [](signed long I) {return Ptr[I];};
56  inline void operator =(T *N) {Ptr = N;};
57  inline bool operator ==(T *lhs) const {return Ptr == lhs;};
58  inline bool operator !=(T *lhs) const {return Ptr != lhs;};
59  inline T *Get() {return Ptr;};
60 
61  inline SPtrArray(T *Ptr) : Ptr(Ptr) {};
62  inline SPtrArray() : Ptr(0) {};
63  inline ~SPtrArray() {delete [] Ptr;};
64 };
65 
66 #endif