libstdc++
std::auto_ptr< _Tp > Class Template Reference

List of all members.

Public Types

typedef _Tp element_type

Public Member Functions

 auto_ptr (element_type *__p=0) throw ()
 auto_ptr (auto_ptr &__a) throw ()
template<typename _Tp1 >
 auto_ptr (auto_ptr< _Tp1 > &__a) throw ()
 auto_ptr (auto_ptr_ref< element_type > __ref) throw ()
 ~auto_ptr ()
element_typeget () const throw ()
template<typename _Tp1 >
 operator auto_ptr< _Tp1 > () throw ()
template<typename _Tp1 >
 operator auto_ptr_ref< _Tp1 > () throw ()
element_typeoperator* () const throw ()
element_typeoperator-> () const throw ()
auto_ptroperator= (auto_ptr &__a) throw ()
template<typename _Tp1 >
auto_ptroperator= (auto_ptr< _Tp1 > &__a) throw ()
auto_ptroperator= (auto_ptr_ref< element_type > __ref) throw ()
element_typerelease () throw ()
void reset (element_type *__p=0) throw ()

Detailed Description

template<typename _Tp>
class std::auto_ptr< _Tp >

A simple smart pointer providing strict ownership semantics.

The Standard says:

      An auto_ptr owns the object it holds a pointer to.  Copying
      an auto_ptr copies the pointer and transfers ownership to the
      destination.  If more than one auto_ptr owns the same object
      at the same time the behavior of the program is undefined.
      The uses of auto_ptr include providing temporary
      exception-safety for dynamically allocated memory, passing
      ownership of dynamically allocated memory to a function, and
      returning dynamically allocated memory from a function.  auto_ptr does not meet the CopyConstructible and Assignable
      requirements for Standard Library container elements and thus
      instantiating a Standard Library container with an auto_ptr results in undefined behavior.
      

Quoted from [20.4.5]/3.

Good examples of what can and cannot be done with auto_ptr can be found in the libstdc++ testsuite.

_GLIBCXX_RESOLVE_LIB_DEFECTS

  1. auto_ptr<> conversion issues These resolutions have all been incorporated.

Definition at line 87 of file auto_ptr.h.


Member Typedef Documentation

template<typename _Tp>
typedef _Tp std::auto_ptr< _Tp >::element_type

The pointed-to type.

Definition at line 94 of file auto_ptr.h.


Constructor & Destructor Documentation

template<typename _Tp>
std::auto_ptr< _Tp >::auto_ptr ( element_type __p = 0) throw ()
inlineexplicit

An auto_ptr is usually constructed from a raw pointer.

Parameters:
__pA pointer (defaults to NULL).

This object now owns the object pointed to by __p.

Definition at line 103 of file auto_ptr.h.

template<typename _Tp>
std::auto_ptr< _Tp >::auto_ptr ( auto_ptr< _Tp > &  __a) throw ()
inline

An auto_ptr can be constructed from another auto_ptr.

Parameters:
__aAnother auto_ptr of the same type.

This object now owns the object previously owned by __a, which has given up ownership.

Definition at line 112 of file auto_ptr.h.

template<typename _Tp>
template<typename _Tp1 >
std::auto_ptr< _Tp >::auto_ptr ( auto_ptr< _Tp1 > &  __a) throw ()
inline

An auto_ptr can be constructed from another auto_ptr.

Parameters:
__aAnother auto_ptr of a different but related type.

A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type.

This object now owns the object previously owned by __a, which has given up ownership.

Definition at line 125 of file auto_ptr.h.

template<typename _Tp>
std::auto_ptr< _Tp >::~auto_ptr ( )
inline

When the auto_ptr goes out of scope, the object it owns is deleted. If it no longer owns anything (i.e., get() is NULL), then this has no effect.

The C++ standard says there is supposed to be an empty throw specification here, but omitting it is standard conforming. Its presence can be detected only if _Tp::~_Tp() throws, but this is prohibited. [17.4.3.6]/2

Definition at line 170 of file auto_ptr.h.

template<typename _Tp>
std::auto_ptr< _Tp >::auto_ptr ( auto_ptr_ref< element_type __ref) throw ()
inline

Automatic conversions.

These operations convert an auto_ptr into and from an auto_ptr_ref automatically as needed. This allows constructs such as

auto_ptr<Derived> func_returning_auto_ptr(.....);
...
auto_ptr<Base> ptr = func_returning_auto_ptr(.....);

Definition at line 260 of file auto_ptr.h.


Member Function Documentation

template<typename _Tp>
element_type* std::auto_ptr< _Tp >::get ( void  ) const throw ()
inline

Bypassing the smart pointer.

Returns:
The raw pointer being managed.

You can get a copy of the pointer that this object owns, for situations such as passing to a function which only accepts a raw pointer.

Note:
This auto_ptr still owns the memory.

Definition at line 211 of file auto_ptr.h.

template<typename _Tp>
element_type& std::auto_ptr< _Tp >::operator* ( ) const throw ()
inline

Smart pointer dereferencing.

If this auto_ptr no longer owns anything, then this operation will crash. (For a smart pointer, no longer owns anything is the same as being a null pointer, and you know what happens when you dereference one of those...)

Definition at line 181 of file auto_ptr.h.

template<typename _Tp>
element_type* std::auto_ptr< _Tp >::operator-> ( ) const throw ()
inline

Smart pointer dereferencing.

This returns the pointer itself, which the language then will automatically cause to be dereferenced.

Definition at line 194 of file auto_ptr.h.

template<typename _Tp>
auto_ptr& std::auto_ptr< _Tp >::operator= ( auto_ptr< _Tp > &  __a) throw ()
inline

auto_ptr assignment operator.

Parameters:
__aAnother auto_ptr of the same type.

This object now owns the object previously owned by __a, which has given up ownership. The object that this one used to own and track has been deleted.

Definition at line 136 of file auto_ptr.h.

References std::auto_ptr< _Tp >::reset().

template<typename _Tp>
template<typename _Tp1 >
auto_ptr& std::auto_ptr< _Tp >::operator= ( auto_ptr< _Tp1 > &  __a) throw ()
inline

auto_ptr assignment operator.

Parameters:
__aAnother auto_ptr of a different but related type.

A pointer-to-Tp1 must be convertible to a pointer-to-Tp/element_type.

This object now owns the object previously owned by __a, which has given up ownership. The object that this one used to own and track has been deleted.

Definition at line 154 of file auto_ptr.h.

References std::auto_ptr< _Tp >::reset().

template<typename _Tp>
element_type* std::auto_ptr< _Tp >::release ( ) throw ()
inline

Bypassing the smart pointer.

Returns:
The raw pointer being managed.

You can get a copy of the pointer that this object owns, for situations such as passing to a function which only accepts a raw pointer.

Note:
This auto_ptr no longer owns the memory. When this object goes out of scope, nothing will happen.

Definition at line 225 of file auto_ptr.h.

template<typename _Tp>
void std::auto_ptr< _Tp >::reset ( element_type __p = 0) throw ()
inline

Forcibly deletes the managed object.

Parameters:
__pA pointer (defaults to NULL).

This object now owns the object pointed to by __p. The previous object has been deleted.

Definition at line 240 of file auto_ptr.h.

Referenced by std::auto_ptr< _Tp >::operator=().


The documentation for this class was generated from the following file: