raSystem  1.0 bata
raSmartPointer.h
Go to the documentation of this file.
1 #pragma once
2 
3  template<class T> class raSmartPointer
4  {
5  public:
6  raSmartPointer() throw()
7  {
8  m_data = NULL;
9  m_rc = new IRAUnknown();
10  m_rc->AddRef();
11  }
12  raSmartPointer(T *pVal) throw()
13  {
14  m_data = pVal;
15  m_rc = new IRAUnknown();
16  m_rc->AddRef();
17  }
18  raSmartPointer(const raSmartPointer<T>& ptrCopy) throw()
19  {
20  m_data = ptrCopy.m_data;
21  m_rc = ptrCopy.m_rc;
22 
23  m_rc->AddRef();
24  }
26  {
27  if (this != &sp)
28  {
29  if(m_rc->Release() == 0)
30  {
31  delete m_data;
32  delete m_rc;
33  }
34  m_data = sp.m_data;
35  m_rc = sp.m_rc;
36  m_rc->AddRef();
37  }
38  return *this;
39  }
41  {
42  if(m_rc->Release() == 0)
43  {
44  delete m_data;
45  delete m_rc;
46  }
47  }
48  T& operator*() const throw()
49  {
50  return *m_data;
51  }
52 
53  T *operator->() const throw()
54  {
55  return m_data;
56  }
57 
58  T *get() const throw()
59  {
60  return m_data;
61  }
62  PROPERTY(T*, Data);
63  GET(Data)
64  {
65  return m_data;
66  }
67  SET(Data)
68  {
69  m_data = value;
70  m_rc->AddRef();
71  }
72  private:
73  T *m_data;
74  IRAUnknown* m_rc;
75  };
T & operator*() const
void AddRef()
Definition: IRAUnknown.h:10
T * operator->() const
int Release()
Definition: IRAUnknown.h:14
raSmartPointer(const raSmartPointer< T > &ptrCopy)
raSmartPointer(T *pVal)
raSmartPointer< T > & operator=(const raSmartPointer< T > &sp)
PROPERTY(T *, Data)