ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > Class Template Reference

This class implements support for a reference counted auto_ptr. Assigning or copying instances of an ACE_Refcounted_Auto_Ptr will automatically increment the reference count. When the last instance that references a ACE_Refcounted_Auto_Ptr instance is destroyed or overwritten, it will invoke delete on its underlying pointer. More...

#include <Refcounted_Auto_Ptr.h>

Collaboration diagram for ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 ACE_Refcounted_Auto_Ptr (X *p=0)
 ACE_Refcounted_Auto_Ptr (const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &r)
virtual ~ACE_Refcounted_Auto_Ptr (void)
 Destructor.

void operator= (const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &r)
bool operator== (const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &r) const
bool operator!= (const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &r) const
 Inequality operator, which is the opposite of equality.

X * operator-> (void) const
 Redirection operator.

X & operator * () const
X * release (void)
 Sets the pointer value to 0 and returns its old value.

void reset (X *p=0)
X * get (void) const
 Get the pointer value.

int count (void) const
 Get the reference count value.

int null (void) const
 Allows us to check for NULL on all ACE_Refcounted_Auto_Ptr objects.


Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.


Protected Types

typedef ACE_Refcounted_Auto_Ptr_Rep<
X, ACE_LOCK > 
AUTO_REFCOUNTED_PTR_REP
 the ACE_Refcounted_Auto_Ptr_Rep


Protected Attributes

AUTO_REFCOUNTED_PTR_REPrep_
 Protect operations on the .


Detailed Description

template<class X, class ACE_LOCK>
class ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >

This class implements support for a reference counted auto_ptr. Assigning or copying instances of an ACE_Refcounted_Auto_Ptr will automatically increment the reference count. When the last instance that references a ACE_Refcounted_Auto_Ptr instance is destroyed or overwritten, it will invoke delete on its underlying pointer.

Definition at line 41 of file Refcounted_Auto_Ptr.h.


Member Typedef Documentation

template<class X, class ACE_LOCK>
typedef ACE_Refcounted_Auto_Ptr_Rep<X, ACE_LOCK> ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::AUTO_REFCOUNTED_PTR_REP [protected]
 

the ACE_Refcounted_Auto_Ptr_Rep

Definition at line 106 of file Refcounted_Auto_Ptr.h.

Referenced by ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::ACE_Refcounted_Auto_Ptr().


Constructor & Destructor Documentation

template<class X, class ACE_LOCK>
ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::ACE_Refcounted_Auto_Ptr X *  p = 0  )  [inline]
 

Constructor that initializes an ACE_Refcounted_Auto_Ptr to point to the result immediately.

Definition at line 151 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::AUTO_REFCOUNTED_PTR_REP.

00152   : rep_ (AUTO_REFCOUNTED_PTR_REP::create (p))
00153 {
00154 }

template<class X, class ACE_LOCK>
ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::ACE_Refcounted_Auto_Ptr const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &  r  )  [inline]
 

Copy constructor binds the created object and r to the same ACE_Refcounted_Auto_Ptr_Rep. An ACE_Refcounted_Auto_Ptr_Rep is created if necessary.

Definition at line 157 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::AUTO_REFCOUNTED_PTR_REP.

00158   : rep_ (AUTO_REFCOUNTED_PTR_REP::attach (((ACE_Refcounted_Auto_Ptr<X, ACE_LOCK> &) r).rep_))
00159 {
00160 }

template<class X, class ACE_LOCK>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::~ACE_Refcounted_Auto_Ptr void   )  [virtual]
 

Destructor.

Definition at line 11 of file Refcounted_Auto_Ptr.cpp.

00012 {
00013   AUTO_REFCOUNTED_PTR_REP::detach (rep_);
00014 }


Member Function Documentation

template<class X, class ACE_LOCK>
int ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::count void   )  const [inline]
 

Get the reference count value.

Definition at line 18 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr_Rep< X, ACE_LOCK >::count().

00019 {
00020   return this->rep_->count ();
00021 }

template<class X, class ACE_LOCK>
X * ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::get void   )  const [inline]
 

Get the pointer value.

Definition at line 187 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr_Rep< X, ACE_LOCK >::get().

Referenced by ACE_WIN32_Wakeup_Completion::complete(), ACE_WIN32_Asynch_Timer::complete(), ACE_WIN32_Asynch_Write_Dgram_Result::complete(), ACE_WIN32_Asynch_Read_Dgram_Result::complete(), ACE_WIN32_Asynch_Transmit_File_Result::complete(), ACE_WIN32_Asynch_Connect_Result::complete(), ACE_WIN32_Asynch_Accept_Result::complete(), ACE_WIN32_Asynch_Write_File_Result::complete(), ACE_WIN32_Asynch_Read_File_Result::complete(), ACE_WIN32_Asynch_Write_Stream_Result::complete(), ACE_WIN32_Asynch_Read_Stream_Result::complete(), ACE_POSIX_Wakeup_Completion::complete(), ACE_POSIX_Asynch_Timer::complete(), ACE_POSIX_Asynch_Write_Dgram_Result::complete(), ACE_POSIX_Asynch_Read_Dgram_Result::complete(), ACE_POSIX_Asynch_Transmit_File_Result::complete(), ACE_POSIX_Asynch_Connect_Result::complete(), ACE_POSIX_Asynch_Accept_Result::complete(), ACE_POSIX_Asynch_Write_File_Result::complete(), ACE_POSIX_Asynch_Read_File_Result::complete(), ACE_POSIX_Asynch_Write_Stream_Result::complete(), and ACE_POSIX_Asynch_Read_Stream_Result::complete().

00188 {
00189   // We return the ACE_Future_rep.
00190   return this->rep_->get ();
00191 }

template<class X, class ACE_LOCK>
int ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::null void   )  const [inline]
 

Allows us to check for NULL on all ACE_Refcounted_Auto_Ptr objects.

Definition at line 32 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr_Rep< X, ACE_LOCK >::null().

00033 {
00034   return this->rep_->null ();
00035 }

template<class X, class ACE_LOCK>
X & ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator *  )  const [inline]
 

Definition at line 181 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr_Rep< X, ACE_LOCK >::get().

00182 {
00183   return *this->rep_->get ();
00184 }

template<class X, class ACE_LOCK>
bool ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator!= const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &  r  )  const [inline]
 

Inequality operator, which is the opposite of equality.

Definition at line 169 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::rep_.

00170 {
00171   return r.rep_ != this->rep_;
00172 }

template<class X, class ACE_LOCK>
X * ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator-> void   )  const [inline]
 

Redirection operator.

Definition at line 175 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr_Rep< X, ACE_LOCK >::get().

00176 {
00177     return this->rep_->get();
00178 }

template<class X, class ACE_LOCK>
void ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator= const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &  r  )  [inline]
 

Assignment operator that binds the current object and r to the same ACE_Refcounted_Auto_Ptr_Rep. An ACE_Refcounted_Auto_Ptr_Rep is created if necessary.

Definition at line 206 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::rep_.

00207 {
00208   // assignment:
00209   //
00210   //  bind <this> to the same <ACE_Refcounted_Auto_Ptr_Rep> as <r>.
00211 
00212   // This will work if &r == this, by first increasing the ref count
00213   ACE_Refcounted_Auto_Ptr<X, ACE_LOCK> &r = (ACE_Refcounted_Auto_Ptr<X, ACE_LOCK> &) rhs;
00214   AUTO_REFCOUNTED_PTR_REP::assign (this->rep_,
00215                                    AUTO_REFCOUNTED_PTR_REP::attach (r.rep_));
00216 }

template<class X, class ACE_LOCK>
bool ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator== const ACE_Refcounted_Auto_Ptr< X, ACE_LOCK > &  r  )  const [inline]
 

Note:
It also returns true if both objects have just been instantiated and not used yet.

Definition at line 163 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::rep_.

00164 {
00165   return r.rep_ == this->rep_;
00166 }

template<class X, class ACE_LOCK>
X * ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::release void   )  [inline]
 

Sets the pointer value to 0 and returns its old value.

Definition at line 194 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr_Rep< X, ACE_LOCK >::release().

00195 {
00196   return this->rep_->release ();
00197 }

template<class X, class ACE_LOCK>
void ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::reset X *  p = 0  )  [inline]
 

Invokes delete on the previous pointer value and then sets the pointer value to the specified value.

Definition at line 200 of file Refcounted_Auto_Ptr.inl.

References ACE_Refcounted_Auto_Ptr_Rep< X, ACE_LOCK >::reset().

00201 {
00202   this->rep_->reset (p);
00203 }


Member Data Documentation

template<class X, class ACE_LOCK>
ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::ACE_ALLOC_HOOK_DECLARE
 

Declare the dynamic allocation hooks.

Definition at line 102 of file Refcounted_Auto_Ptr.h.

template<class X, class ACE_LOCK>
AUTO_REFCOUNTED_PTR_REP* ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::rep_ [protected]
 

Protect operations on the .

Definition at line 109 of file Refcounted_Auto_Ptr.h.

Referenced by ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator!=(), ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator=(), and ACE_Refcounted_Auto_Ptr< X, ACE_LOCK >::operator==().


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 11:27:53 2006 for ACE by doxygen 1.3.6