Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

cppdom_boost::shared_ptr< T > Class Template Reference

reference counting smart pointer. More...

#include <shared_ptr.h>

Inheritance diagram for cppdom_boost::shared_ptr:

Inheritance graph
[legend]
Collaboration diagram for cppdom_boost::shared_ptr< T >:

Collaboration graph
[legend]
List of all members.

Public Types

typedef T element_type

Public Methods

 shared_ptr (T *p=0)
 shared_ptr (const shared_ptr &r)
 ~shared_ptr ()
shared_ptr & operator= (const shared_ptr &r)
template<typename Y>  shared_ptr (const shared_ptr< Y > &r)
template<typename Y>  shared_ptr (std::auto_ptr< Y > &r)
template<typename Y> shared_ptr & operator= (const shared_ptr< Y > &r)
template<typename Y> shared_ptr & operator= (std::auto_ptr< Y > &r)
void reset (T *p=0)
T & operator * () const
T * operator-> () const
T * get () const
long use_count () const
bool unique () const
void swap (shared_ptr< T > &other)

Private Methods

void dispose ()
void share (T *rpx, long *rpn)

Private Attributes

T * px
long * pn

Friends

class shared_ptr

Detailed Description

template<typename T>
class cppdom_boost::shared_ptr< T >

reference counting smart pointer.

An enhanced relative of scoped_ptr with reference counted copy semantics. The object pointed to is deleted when the last shared_ptr pointing to it is destroyed or reset.

Definition at line 112 of file shared_ptr.h.


Member Typedef Documentation

template<typename T>
typedef T cppdom_boost::shared_ptr< T >::element_type
 

Definition at line 114 of file shared_ptr.h.


Constructor & Destructor Documentation

template<typename T>
cppdom_boost::shared_ptr< T >::shared_ptr T *    p = 0 [inline, explicit]
 

Definition at line 116 of file shared_ptr.h.

00116                                 : px(p) {
00117       try { pn = new long(1); }  // fix: prevent leak if new throws
00118       catch (...) { delete p; throw; } 
00119    }

template<typename T>
cppdom_boost::shared_ptr< T >::shared_ptr const shared_ptr< T > &    r [inline]
 

Definition at line 121 of file shared_ptr.h.

00121 : px(r.px) { ++*(pn = r.pn); }  // never throws

template<typename T>
cppdom_boost::shared_ptr< T >::~shared_ptr   [inline]
 

Definition at line 123 of file shared_ptr.h.

00123 { dispose(); }

template<typename T>
template<typename Y>
cppdom_boost::shared_ptr< T >::shared_ptr const shared_ptr< Y > &    r [inline]
 

Definition at line 132 of file shared_ptr.h.

00132                                          : px(r.px) {  // never throws 
00133          ++*(pn = r.pn); 
00134       }

template<typename T>
template<typename Y>
cppdom_boost::shared_ptr< T >::shared_ptr std::auto_ptr< Y > &    r [inline]
 

Definition at line 137 of file shared_ptr.h.

00137                                     { 
00138          pn = new long(1); // may throw
00139          px = r.release(); // fix: moved here to stop leak if new throws
00140       } 


Member Function Documentation

template<typename T>
void cppdom_boost::shared_ptr< T >::dispose   [inline, private]
 

Definition at line 223 of file shared_ptr.h.

Referenced by cppdom_boost::shared_ptr< class XMLEventHandler >::share(), and cppdom_boost::shared_ptr< class XMLEventHandler >::~shared_ptr().

00223 { if (--*pn == 0) { delete px; delete pn; } }

template<typename T>
T* cppdom_boost::shared_ptr< T >::get   const [inline]
 

Definition at line 196 of file shared_ptr.h.

Referenced by cppdom_boost::operator!=(), and cppdom_boost::operator==().

00196 { return px; }  // never throws

template<typename T>
T& cppdom_boost::shared_ptr< T >::operator *   const [inline]
 

Definition at line 194 of file shared_ptr.h.

00194 { return *px; }  // never throws

template<typename T>
T* cppdom_boost::shared_ptr< T >::operator->   const [inline]
 

Definition at line 195 of file shared_ptr.h.

00195 { return px; }  // never throws

template<typename T>
template<typename Y>
shared_ptr& cppdom_boost::shared_ptr< T >::operator= std::auto_ptr< Y > &    r [inline]
 

Definition at line 149 of file shared_ptr.h.

00149                                                {
00150          // code choice driven by guarantee of "no effect if new throws"
00151          if (*pn == 1) { delete px; }
00152          else { // allocate new reference counter
00153            long * tmp = new long(1); // may throw
00154            --*pn; // only decrement once danger of new throwing is past
00155            pn = tmp;
00156          } // allocate new reference counter
00157          px = r.release(); // fix: moved here so doesn't leak if new throws 
00158          return *this;
00159       }

template<typename T>
template<typename Y>
shared_ptr& cppdom_boost::shared_ptr< T >::operator= const shared_ptr< Y > &    r [inline]
 

Definition at line 143 of file shared_ptr.h.

00143                                                     { 
00144          share(r.px,r.pn);
00145          return *this;
00146       }

template<typename T>
shared_ptr& cppdom_boost::shared_ptr< T >::operator= const shared_ptr< T > &    r [inline]
 

Definition at line 125 of file shared_ptr.h.

00125                                               {
00126       share(r.px,r.pn);
00127       return *this;
00128    }

template<typename T>
void cppdom_boost::shared_ptr< T >::reset T *    p = 0 [inline]
 

Definition at line 179 of file shared_ptr.h.

00179                       {
00180       if ( px == p ) return;  // fix: self-assignment safe
00181       if (--*pn == 0) { delete px; }
00182       else { // allocate new reference counter
00183         try { pn = new long; }  // fix: prevent leak if new throws
00184         catch (...) {
00185           ++*pn;  // undo effect of --*pn above to meet effects guarantee 
00186           delete p;
00187           throw;
00188         } // catch
00189       } // allocate new reference counter
00190       *pn = 1;
00191       px = p;
00192    } // reset

template<typename T>
void cppdom_boost::shared_ptr< T >::share T *    rpx,
long *    rpn
[inline, private]
 

Definition at line 225 of file shared_ptr.h.

Referenced by cppdom_boost::shared_ptr< class XMLEventHandler >::operator=().

00225                                  {
00226       if (pn != rpn) {
00227          dispose();
00228          px = rpx;
00229          ++*(pn = rpn);
00230       }
00231    } // share

template<typename T>
void cppdom_boost::shared_ptr< T >::swap shared_ptr< T > &    other [inline]
 

Definition at line 205 of file shared_ptr.h.

Referenced by std::swap().

00206      { std::swap(px,other.px); std::swap(pn,other.pn); }

template<typename T>
bool cppdom_boost::shared_ptr< T >::unique   const [inline]
 

Definition at line 203 of file shared_ptr.h.

00203 { return *pn == 1; }  // never throws

template<typename T>
long cppdom_boost::shared_ptr< T >::use_count   const [inline]
 

Definition at line 202 of file shared_ptr.h.

00202 { return *pn; }  // never throws


Friends And Related Function Documentation

template<typename T>
friend class shared_ptr [friend]
 

Definition at line 220 of file shared_ptr.h.


Member Data Documentation

template<typename T>
long* cppdom_boost::shared_ptr< T >::pn [private]
 

Definition at line 216 of file shared_ptr.h.

Referenced by cppdom_boost::shared_ptr< class XMLEventHandler >::dispose(), cppdom_boost::shared_ptr< class XMLEventHandler >::operator=(), cppdom_boost::shared_ptr< class XMLEventHandler >::reset(), cppdom_boost::shared_ptr< class XMLEventHandler >::share(), cppdom_boost::shared_ptr< class XMLEventHandler >::shared_ptr(), cppdom_boost::shared_ptr< class XMLEventHandler >::swap(), cppdom_boost::shared_ptr< class XMLEventHandler >::unique(), and cppdom_boost::shared_ptr< class XMLEventHandler >::use_count().

template<typename T>
T* cppdom_boost::shared_ptr< T >::px [private]
 

Definition at line 215 of file shared_ptr.h.

Referenced by cppdom_boost::shared_ptr< class XMLEventHandler >::dispose(), cppdom_boost::shared_ptr< class XMLEventHandler >::get(), cppdom_boost::shared_ptr< class XMLEventHandler >::operator *(), cppdom_boost::shared_ptr< class XMLEventHandler >::operator->(), cppdom_boost::shared_ptr< class XMLEventHandler >::operator=(), cppdom_boost::shared_ptr< class XMLEventHandler >::reset(), cppdom_boost::shared_ptr< class XMLEventHandler >::share(), cppdom_boost::shared_ptr< class XMLEventHandler >::shared_ptr(), and cppdom_boost::shared_ptr< class XMLEventHandler >::swap().


The documentation for this class was generated from the following file:
Generated on Thu Jan 2 21:29:23 2003 for cppdom by doxygen1.2.15