65 void operator delete (
void *);
67 friend class Ptr<const T>;
69 friend U *GetPointer (
const Ptr<U> &p);
71 friend U *PeekPointer (
const Ptr<U> &p);
73 inline void Acquire (
void)
const;
98 Ptr (T *ptr,
bool ref);
101 template <
typename U>
106 T *operator -> ()
const;
108 const T &operator * ()
const;
114 operator Tester * ()
const;
117 template <
typename T>
120 template <
typename T,
typename T1>
123 template <
typename T,
typename T1,
typename T2>
124 Ptr<T> Create (T1 a1, T2 a2);
126 template <
typename T,
typename T1,
typename T2,
typename T3>
127 Ptr<T> Create (T1 a1, T2 a2, T3 a3);
129 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4>
130 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4);
132 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
133 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
135 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
136 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6);
138 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
139 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7);
150 template <
typename T>
151 T * PeekPointer (
const Ptr<T> &p);
162 template <
typename T>
163 T * GetPointer (
const Ptr<T> &p);
165 template <
typename T>
166 std::ostream &operator << (std::ostream &, const Ptr<T> &p);
170 template <
typename T1,
typename T2>
171 bool operator == (
Ptr<T1> const &lhs, T2
const *rhs);
174 template <
typename T1,
typename T2>
175 bool operator == (T1
const *lhs,
Ptr<T2> &rhs);
178 template <
typename T1,
typename T2>
179 bool operator != (
Ptr<T1> const &lhs, T2
const *rhs);
182 template <
typename T1,
typename T2>
183 bool operator != (T1
const *lhs,
Ptr<T2> &rhs);
186 template <
typename T1,
typename T2>
190 template <
typename T1,
typename T2>
193 template <
typename T1,
typename T2>
196 template <
typename T>
199 template <
typename T>
202 static T & GetReference (
Ptr<T> const p)
204 return *PeekPointer (p);
208 template <
typename T>
211 template <
typename T>
214 static T &GetReference (
Ptr<T> p) {
215 return *PeekPointer (p);
230 template <
typename T>
233 return Ptr<T> (
new T (),
false);
236 template <
typename T,
typename T1>
237 Ptr<T> Create (T1 a1)
239 return Ptr<T> (
new T (a1),
false);
242 template <
typename T,
typename T1,
typename T2>
243 Ptr<T> Create (T1 a1, T2 a2)
245 return Ptr<T> (
new T (a1, a2),
false);
248 template <
typename T,
typename T1,
typename T2,
typename T3>
249 Ptr<T> Create (T1 a1, T2 a2, T3 a3)
251 return Ptr<T> (
new T (a1, a2, a3),
false);
254 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4>
255 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4)
257 return Ptr<T> (
new T (a1, a2, a3, a4),
false);
260 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
261 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
263 return Ptr<T> (
new T (a1, a2, a3, a4, a5),
false);
266 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
267 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6)
269 return Ptr<T> (
new T (a1, a2, a3, a4, a5, a6),
false);
272 template <
typename T,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
273 Ptr<T> Create (T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7)
275 return Ptr<T> (
new T (a1, a2, a3, a4, a5, a6, a7),
false);
278 template <
typename T>
284 template <
typename T>
291 template <
typename T>
292 std::ostream &operator << (std::ostream &os, const Ptr<T> &p)
294 os << PeekPointer (p);
298 template <
typename T1,
typename T2>
300 operator == (Ptr<T1>
const &lhs, T2
const *rhs)
302 return PeekPointer (lhs) == rhs;
305 template <
typename T1,
typename T2>
307 operator == (T1
const *lhs, Ptr<T2> &rhs)
309 return lhs == PeekPointer (rhs);
312 template <
typename T1,
typename T2>
314 operator != (Ptr<T1>
const &lhs, T2
const *rhs)
316 return PeekPointer (lhs) != rhs;
319 template <
typename T1,
typename T2>
321 operator != (T1
const *lhs, Ptr<T2> &rhs)
323 return lhs != PeekPointer (rhs);
326 template <
typename T1,
typename T2>
328 operator == (Ptr<T1>
const &lhs, Ptr<T2>
const &rhs)
330 return PeekPointer (lhs) == PeekPointer (rhs);
333 template <
typename T1,
typename T2>
335 operator != (Ptr<T1>
const &lhs, Ptr<T2>
const &rhs)
337 return PeekPointer (lhs) != PeekPointer (rhs);
340 template <
typename T>
341 bool operator < (const Ptr<T> &lhs,
const Ptr<T> &rhs)
343 return PeekPointer<T> (lhs) < PeekPointer<T> (rhs);
346 template <
typename T>
347 bool operator <= (const Ptr<T> &lhs,
const Ptr<T> &rhs)
349 return PeekPointer<T> (lhs) <= PeekPointer<T> (rhs);
352 template <
typename T>
353 bool operator > (
const Ptr<T> &lhs,
const Ptr<T> &rhs)
355 return PeekPointer<T> (lhs) > PeekPointer<T> (rhs);
358 template <
typename T>
359 bool operator >= (
const Ptr<T> &lhs,
const Ptr<T> &rhs)
361 return PeekPointer<T> (lhs) >= PeekPointer<T> (rhs);
364 template <
typename T1,
typename T2>
366 ConstCast (Ptr<T2>
const&p)
368 return Ptr<T1> (
const_cast<T1 *
> (PeekPointer (p)));
371 template <
typename T1,
typename T2>
373 DynamicCast (Ptr<T2>
const&p)
375 return Ptr<T1> (
dynamic_cast<T1 *
> (PeekPointer (p)));
378 template <
typename T1,
typename T2>
380 StaticCast (Ptr<T2>
const&p)
382 return Ptr<T1> (
static_cast<T1 *
> (PeekPointer (p)));
386 template <
typename T>
387 Ptr<T> Copy (Ptr<T>
object)
389 Ptr<T> p = Ptr<T> (
new T (*PeekPointer (
object)),
false);
393 template <
typename T>
394 Ptr<T> Copy (Ptr<const T>
object)
396 Ptr<T> p = Ptr<T> (
new T (*PeekPointer (
object)),
false);
404 template <
typename T>
406 Ptr<T>::Acquire (
void)
const
414 template <
typename T>
420 template <
typename T>
427 template <
typename T>
437 template <
typename T>
439 : m_ptr (PeekPointer (o))
443 template <
typename T>
444 template <
typename U>
446 : m_ptr (PeekPointer (o))
451 template <
typename T>
460 template <
typename T>
462 Ptr<T>::operator = (Ptr
const& o)
477 template <
typename T>
479 Ptr<T>::operator -> ()
484 template <
typename T>
486 Ptr<T>::operator -> ()
const
491 template <
typename T>
493 Ptr<T>::operator * ()
const
498 template <
typename T>
500 Ptr<T>::operator * ()
505 template <
typename T>
512 template <
typename T>
513 Ptr<T>::operator Tester * ()
const
smart pointer class similar to boost::intrusive_ptr