]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/objectdataptr.tex
no changes, just come cleanup and more comments
[wxWidgets.git] / docs / latex / wx / objectdataptr.tex
CommitLineData
ef36734a
RR
1\section{\class{wxObjectDataPtr<T>}}\label{wxobjectdataptr}
2
a60b0ddc
RR
3This is helper template class primarily written to avoid memory
4leaks because of missing calls to \helpref{wxObjectRefData::DecRef}{wxobjectrefdatadecref}.
ef36734a 5
a60b0ddc
RR
6Despite the name this template can actually be used as a
7smart pointer for any class implementing the reference
aaf4caee
RR
8counting interface which only consists of the two methods
9{\bf T::IncRef()} and {\bf T::DecRef()}.
a60b0ddc
RR
10
11The difference to \helpref{wxSharedPtr}{wxsharedptr} is that
12wxObjectDataPtr relies on the reference counting to be in
13the class pointed to where as wxSharedPtr implements the
14reference counting itself.
ef36734a
RR
15
16\wxheading{See also}
17
18\helpref{wxObject}{wxobject},
19\helpref{wxObjectRefData}{wxobjectrefdata},
20\helpref{Reference counting}{trefcount}
21
a60b0ddc
RR
22\helpref{wxSharedPtr}{wxsharedptr},
23\helpref{wxScopedPtr}{wxscopedptrtemplate},
24\helpref{wxWeakRef}{wxweakref}
25
26
ef36734a
RR
27\wxheading{Derived from}
28
29No base class
30
31\wxheading{Include files}
32
33<object.h>
34
35\wxheading{Data structures}
36
d60e8c6b
RR
37{\small%
38\begin{verbatim}
39typedef T element_type
40\end{verbatim}
41}%
ef36734a
RR
42
43\wxheading{Example}
44
45\begin{verbatim}
46
ef36734a
RR
47class MyCarRefData: public wxObjectRefData
48{
49public:
50 MyCarRefData() { m_price = 0; }
51
52 MyCarRefData( const MyCarRefData& data )
53 : wxObjectRefData()
54 {
55 m_price = data.m_price;
56 }
57
ef36734a
RR
58 void SetPrice( int price ) { m_price = price; }
59 int GetPrice() { return m_price; }
60
61protected:
62 int m_price;
63};
64
65class MyCar
66{
67public:
a60b0ddc
RR
68 MyCar( int price ) : m_data( new MyCarRefData )
69 {
70 m_data->SetPrice( price );
71 }
72
73 MyCar& operator =( const MyCar& tocopy )
74 {
75 m_data = tocopy.m_data;
76 return *this;
77 }
ef36734a 78
a60b0ddc
RR
79 bool operator == ( const MyCar& other ) const
80 {
81 if (m_data.get() == other.m_data.get()) return true;
82 return (m_data->GetPrice() == other.m_data->GetPrice());
83 }
ef36734a 84
a60b0ddc
RR
85 void SetPrice( int price )
86 {
87 UnShare();
88 m_data->SetPrice( price );
89 }
90
91 int GetPrice() const
92 {
93 return m_data->GetPrice();
94 }
ef36734a 95
a60b0ddc 96 wxObjectDataPtr<MyCarRefData> m_data;
ef36734a
RR
97
98protected:
a60b0ddc
RR
99 void UnShare()
100 {
101 if (m_data->GetRefCount() == 1)
102 return;
ef36734a 103
a60b0ddc
RR
104 m_data.reset( new MyCarRefData( *m_data ) );
105 }
106};
ef36734a
RR
107
108\end{verbatim}
109
110
111\latexignore{\rtfignore{\wxheading{Members}}}
112
113\membersection{wxObjectDataPtr<T>::wxObjectDataPtr<T>}\label{wxobjectdataptrwxobjectdataptr}
114
115\func{wxEXPLICIT}{wxObjectDataPtr<T>}{\param{T* }{ptr = NULL}}
116
117Constructor. {\it ptr} is a pointer to the reference
aaf4caee
RR
118counted object to which this class points. If {\it ptr}
119is not NULL {\bf T::IncRef()} will be called on the
120object.
ef36734a
RR
121
122\func{}{wxObjectDataPtr<T>}{\param{const wxObjectDataPtr<T>\& }{tocopy}}
123
124This copy constructor increases the count of the reference
125counted object to which {\it tocopy} points and then this
126class will point to, as well.
127
128\membersection{wxObjectDataPtr<T>::\destruct{wxObjectDataPtr<T>}}\label{wxobjectdataptrdtor}
129
130\func{}{\destruct{wxObjectDataPtr<T>}}{\void}
131
aaf4caee
RR
132Decreases the reference count of the object to which this
133class points.
ef36734a 134
a60b0ddc
RR
135\membersection{wxObjectDataPtr<T>::operator unspecified\_bool\_type}\label{wxobjectdataptroperatorbool}
136
137\constfunc{}{operator unspecified\_bool\_type}{\void}
138
139Conversion to a boolean expression (in a variant which is not
140convertable to anything but a boolean expression). If this class
141contains a valid pointer it will return {\it true}, if it contains
142a NULL pointer it will return {\it false}.
143
144\membersection{wxObjectDataPtr<T>::operator*}\label{wxobjectdataptroperatorreft}
145
146\constfunc{T \&}{operator*}{\void}
147
148Returns a reference to the object. If the internal pointer is NULL
149this method will cause an assert in debug mode.
150
ef36734a
RR
151\membersection{wxObjectDataPtr<T>::operator->}\label{wxobjectdataptroperatorpointer}
152
153\constfunc{T*}{operator->}{\void}
154
e39d30c0
RR
155Returns a pointer to the reference counted object to which
156this class points. If this the internal pointer is NULL,
157this method will assert in debug mode.
ef36734a
RR
158
159\membersection{wxObjectDataPtr<T>::operator=}\label{wxobjectdataptroperatorassign}
160
161\func{wxObjectDataPtr<T>\& operator}{operator=}{\param{const wxObjectDataPtr<T>\& }{tocopy}}
162
163\func{wxObjectDataPtr<T>\& operator}{operator=}{\param{T* }{ptr}}
164
165Assignment operators.
166
167\membersection{wxObjectDataPtr<T>::get}\label{wxobjectdataptrget}
168
169\constfunc{T*}{get}{\void}
170
171Gets a pointer to the reference counted object to which
172this class points.
173
174\membersection{wxObjectDataPtr<T>::reset}\label{wxobjectdataptrreset}
175
176\func{void}{reset}{\param{T* }{ptr}}
177
178Reset this class to {\it ptr} which points to a reference
aaf4caee
RR
179counted object and calls {\bf T::DecRef()} on the previously
180owned object.