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 namespace P6R {
15 
26  template<typename T> class p6ScopedPtr
27  {
28  public:
29  typedef T element_type;
30 
31  explicit p6ScopedPtr(T *ptr=0) : m_ptr(ptr)
32  {}
33 
35  {
44  typedef char ensure_type_is_complete[sizeof(T)];
45  delete m_ptr;
46  }
47 
48  T* operator->() const { P6ASSERT(NULL != m_ptr); return m_ptr; }
49  T& operator*() const { P6ASSERT(NULL != m_ptr); return *m_ptr; }
50  P6BOOL operator!=(T &p) const { return m_ptr != p ? P6TRUE:P6FALSE; }
51  P6BOOL operator==(T *p) const { return m_ptr == p ? P6TRUE:P6FALSE; }
52  P6BOOL operator! () const { return NULL == m_ptr ? P6TRUE:P6FALSE; }
53 
57  T* get() const
58  { return m_ptr; }
59 
63  void swap(p6ScopedPtr &b)
64  {
65  T* pTmp = b.m_ptr;
66  b.m_ptr = m_ptr;
67  m_ptr = pTmp;
68  }
69 
77  T* release()
78  {
79  T* pTmp = m_ptr;
80  m_ptr = NULL;
81  return pTmp;
82  }
83 
90  void reset(T *p=0)
91  {
92  typedef char typemustbecomplete[sizeof(T*)];
93  if(m_ptr != p) {
94  delete m_ptr;
95  m_ptr = p;
96  }
97  }
98 
99  private:
100  T *m_ptr;
101 
102  private:
103  p6ScopedPtr(p6ScopedPtr const &);
104  p6ScopedPtr & operator=(p6ScopedPtr const &);
105  void operator==(p6ScopedPtr const&) const;
106  void operator!=(p6ScopedPtr const&) const;
107  };
108 
109 
110 } // namespace
111 
112 #endif
113 
#define P6TRUE
Definition: p6types.h:102
void swap(p6ScopedPtr &b)
Exchange ownership with another p6ScopedArray.
Definition: p6scopedptr.h:63
P6R::P6ERR(* P6ASSERT)(const P6R::P6WCHAR *pszExpr, const P6R::P6CHAR *pszFile, P6R::P6UINT32 nLine)
Definition: p6dllapi.h:57
T * operator->() const
Definition: p6scopedptr.h:48
bool P6BOOL
Boolean type.
Definition: p6types.h:101
void reset(T *p=0)
Destroy any existing owned object, then take ownership of the object pointed to by p argument...
Definition: p6scopedptr.h:90
T & operator*() const
Definition: p6scopedptr.h:49
P6BOOL operator!() const
Definition: p6scopedptr.h:52
p6ScopedPtr(T *ptr=0)
Definition: p6scopedptr.h:31
P6BOOL operator!=(T &p) const
Definition: p6scopedptr.h:50
P6BOOL operator==(T *p) const
Definition: p6scopedptr.h:51
T * release()
Return the wrapped raw pointer and give up ownership.
Definition: p6scopedptr.h:77
A simple smart pointer that mimics a standard pointer to an allocated object (allocated with new) and...
Definition: p6scopedptr.h:26
#define P6FALSE
Definition: p6types.h:103