ACE::Value_Ptr< T > Class Template Reference

Smart pointer implementation designed for use as a class member. More...

#include <Value_Ptr.h>

Collaboration diagram for ACE::Value_Ptr< T >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 Value_Ptr (T *p=0)
 Constructor.

 ~Value_Ptr (void)
 Destructor.

T & operator * (void) const
 Deference operator.

T * operator-> (void) const
 Pointer operator.

void swap (Value_Ptr &other)
 Value_Ptr (Value_Ptr const &other)
 Copy constructor.

Value_Ptroperator= (Value_Ptr const &other)
 Assignment operator.

template<typename U>  Value_Ptr (Value_Ptr< U > const &other)
 Converting copy constructor.

template<typename U> Value_Ptroperator= (Value_Ptr< U > const &other)
 Converting assignment operator.


Private Member Functions

template<typename U> T * create_from (U const *p) const
 Copying method invoked when copy constructing.


Private Attributes

T * p_
 Object owned by this Value_Ptr.


Friends

class Value_Ptr

Detailed Description

template<typename T>
class ACE::Value_Ptr< T >

Smart pointer implementation designed for use as a class member.

Using a std::auto_ptr<> as a class member is sometimes problematic since ownership of memory is transferred when copying such members. This Value_Ptr class is explicitly designed to avoid such problems by performing copies of the underlying object rather than transfer ownership. This, for example, allows it to be readily used as a member in classes placed inside STL containers.

See also:
Item 31 in "More Exceptional C++" by Herb Sutter.

Definition at line 67 of file Value_Ptr.h.


Constructor & Destructor Documentation

template<typename T>
ACE::Value_Ptr< T >::Value_Ptr T *  p = 0  )  [inline, explicit]
 

Constructor.

Definition at line 72 of file Value_Ptr.h.

00072 : p_ (p) { }

template<typename T>
ACE::Value_Ptr< T >::~Value_Ptr void   )  [inline]
 

Destructor.

Definition at line 75 of file Value_Ptr.h.

00075 { delete this->p_; }

template<typename T>
ACE::Value_Ptr< T >::Value_Ptr Value_Ptr< T > const &  other  )  [inline]
 

Copy constructor.

Definition at line 94 of file Value_Ptr.h.

References ACE::Value_Ptr< T >::create_from().

00095       : p_ (create_from (other.p_)) { }

template<typename T>
template<typename U>
ACE::Value_Ptr< T >::Value_Ptr Value_Ptr< U > const &  other  )  [inline]
 

Converting copy constructor.

Definition at line 113 of file Value_Ptr.h.

References ACE::Value_Ptr< T >::create_from().

00114       : p_ (create_from (other.p_)) { }


Member Function Documentation

template<typename T>
template<typename U>
T* ACE::Value_Ptr< T >::create_from U const *  p  )  const [inline, private]
 

Copying method invoked when copy constructing.

Definition at line 134 of file Value_Ptr.h.

Referenced by ACE::Value_Ptr< T >::Value_Ptr().

00135     {
00136       return p ? VP_traits<U>::clone (p) : 0;
00137     }

template<typename T>
T& ACE::Value_Ptr< T >::operator * void   )  const [inline]
 

Deference operator.

Definition at line 78 of file Value_Ptr.h.

00078 { return *this->p_; }

template<typename T>
T* ACE::Value_Ptr< T >::operator-> void   )  const [inline]
 

Pointer operator.

Definition at line 81 of file Value_Ptr.h.

00081 { return this->p_; }

template<typename T>
template<typename U>
Value_Ptr& ACE::Value_Ptr< T >::operator= Value_Ptr< U > const &  other  )  [inline]
 

Converting assignment operator.

Definition at line 118 of file Value_Ptr.h.

References ACE::Value_Ptr< T >::swap().

00119     {
00120       // Strongly exception-safe.
00121       Value_Ptr temp (other);
00122       this->swap (temp);
00123       return *this;
00124     }

template<typename T>
Value_Ptr& ACE::Value_Ptr< T >::operator= Value_Ptr< T > const &  other  )  [inline]
 

Assignment operator.

Definition at line 98 of file Value_Ptr.h.

References ACE::Value_Ptr< T >::swap().

00099     {
00100       // Strongly exception-safe.
00101       Value_Ptr temp (other);
00102       this->swap (temp);
00103       return *this;
00104     }

template<typename T>
void ACE::Value_Ptr< T >::swap Value_Ptr< T > &  other  )  [inline]
 

Note:
As implemented, the swap operation may not work correctly for auto_ptr<>s, but why would one use an auto_ptr<> as the template argument for this particular template class!?

Definition at line 91 of file Value_Ptr.h.

References ACE::Value_Ptr< T >::p_.

Referenced by ACE::Value_Ptr< T >::operator=().

00091 { std::swap (this->p_, other.p_); }


Friends And Related Function Documentation

template<typename T>
friend class Value_Ptr [friend]
 

Definition at line 155 of file Value_Ptr.h.


Member Data Documentation

template<typename T>
T* ACE::Value_Ptr< T >::p_ [private]
 

Object owned by this Value_Ptr.

Definition at line 159 of file Value_Ptr.h.

Referenced by ACE::Value_Ptr< T >::swap().


The documentation for this class was generated from the following file:
Generated on Thu Nov 9 11:33:44 2006 for ACE by doxygen 1.3.6