Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
p6scopedptr.h
Go to the documentation of this file.
1 
11 #ifndef P6SCOPEDPTR_H__
12 #define P6SCOPEDPTR_H__ 1
13 
14 #ifdef __cplusplus
15 namespace P6R {
16 
27  template<typename T> class p6ScopedPtr
28  {
29  public:
30  typedef T element_type;
31 
32  explicit p6ScopedPtr(T *ptr=0) : m_ptr(ptr)
33  {}
34 
36  {
45  typedef char ensure_type_is_complete[sizeof(T)];
46  delete m_ptr;
47  }
48 
49  T* operator->() const { P6ASSERT(NULL != m_ptr); return m_ptr; }
50  T& operator*() const { P6ASSERT(NULL != m_ptr); return *m_ptr; }
51  P6BOOL operator!=(T &p) const { return m_ptr != p ? P6TRUE:P6FALSE; }
52  P6BOOL operator==(T *p) const { return m_ptr == p ? P6TRUE:P6FALSE; }
53  P6BOOL operator! () const { return NULL == m_ptr ? P6TRUE:P6FALSE; }
54 
58  T* get() const
59  { return m_ptr; }
60 
64  void swap(p6ScopedPtr &b)
65  {
66  T* pTmp = b.m_ptr;
67  b.m_ptr = m_ptr;
68  m_ptr = pTmp;
69  }
70 
78  T* release()
79  {
80  T* pTmp = m_ptr;
81  m_ptr = NULL;
82  return pTmp;
83  }
84 
91  void reset(T *p=0)
92  {
93  typedef char typemustbecomplete[sizeof(T*)];
94  if(m_ptr != p) {
95  delete m_ptr;
96  m_ptr = p;
97  }
98  }
99 
100  private:
101  T *m_ptr;
102 
103  private:
104  p6ScopedPtr(p6ScopedPtr const &);
105  p6ScopedPtr & operator=(p6ScopedPtr const &);
106  void operator==(p6ScopedPtr const&) const;
107  void operator!=(p6ScopedPtr const&) const;
108  };
109 
110 
111 } // namespace
112 #endif // __cplusplus
113 #endif
114 
#define P6TRUE
Definition: p6types.h:134
void swap(p6ScopedPtr &b)
Exchange ownership with another p6ScopedArray.
Definition: p6scopedptr.h:64
T * operator->() const
Definition: p6scopedptr.h:49
unsigned char P6BOOL
Boolean type.
Definition: p6types.h:133
void reset(T *p=0)
Destroy any existing owned object, then take ownership of the object pointed to by p argument...
Definition: p6scopedptr.h:91
T & operator*() const
Definition: p6scopedptr.h:50
P6ERR(P6CCALL * P6ASSERT)(const P6WCHAR *pszExpr, const P6CHAR *pszFile, P6UINT32 nLine)
Definition: p6dllapi.h:58
P6BOOL operator!() const
Definition: p6scopedptr.h:53
p6ScopedPtr(T *ptr=0)
Definition: p6scopedptr.h:32
P6BOOL operator!=(T &p) const
Definition: p6scopedptr.h:51
P6BOOL operator==(T *p) const
Definition: p6scopedptr.h:52
T * release()
Return the wrapped raw pointer and give up ownership.
Definition: p6scopedptr.h:78
A simple smart pointer that mimics a standard pointer to an allocated object (allocated with new) and...
Definition: p6scopedptr.h:27
#define P6FALSE
Definition: p6types.h:135