# std::auto_ptr< _Tp > Class Template Reference

A simple smart pointer providing strict ownership semantics. More...

List of all members.

## Public Types

typedef _Tp | element_type
| The pointed-to type.

## Public Methods

| auto_ptr (element_type *__p=0) throw ()
| An %auto_ptr is usually constructed from a raw pointer.
| auto_ptr (auto_ptr &__a) throw ()
| An %auto_ptr can be constructed from another %auto_ptr.
template<typename _Tp1> | auto_ptr (auto_ptr< _Tp1 > &__a) throw ()
| An %auto_ptr can be constructed from another %auto_ptr.
auto_ptr & | operator= (auto_ptr &__a) throw ()
| %auto_ptr assignment operator.
template<typename _Tp1> auto_ptr & | operator= (auto_ptr< _Tp1 > &__a) throw ()
| %auto_ptr assignment operator.
| ~auto_ptr ()
element_type & | operator * () const throw ()
| Smart pointer dereferencing.
element_type * | operator-> () const throw ()
| Smart pointer dereferencing.
element_type * | get () const throw ()
| Bypassing the smart pointer.
element_type * | release () throw ()
| Bypassing the smart pointer.
void | reset (element_type *__p=0) throw ()
| Forcibly deletes the managed object.
| auto_ptr (auto_ptr_ref< element_type > __ref) throw ()
| Automatic conversions.
auto_ptr & | operator= (auto_ptr_ref< element_type > __ref) throw ()
| Automatic conversions.
template<typename _Tp1> | operator auto_ptr_ref () throw ()
| Automatic conversions.
template<typename _Tp1> | operator auto_ptr () throw ()
| Automatic conversions.

## 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.

Definition at line 167 of file memory.

## Member Typedef Documentation

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

| The pointed-to type. Definition at line 174 of file memory. Referenced by std::auto_ptr< _Tp >::auto_ptr() , std::auto_ptr< _Tp >::release() , and std::auto_ptr< _Tp >::reset() .

## Constructor & Destructor Documentation

template<typename _Tp>
std::auto_ptr< _Tp >::auto_ptr | ( | element_type * | __p = 0 | ) | throw ()`[inline, explicit]`

An %auto_ptr is usually constructed from a raw pointer.

Parameters:

  p | A pointer (defaults to NULL).

This object now owns the object pointed to by p.

Definition at line 183 of file memory.

References std::auto_ptr< _Tp >::element_type .

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:

  a | Another %auto_ptr of the same type.

This object now owns the object previously owned by a, which has given up ownsership.

Definition at line 192 of file memory.

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:

  a | Another %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 ownsership.

Definition at line 204 of file memory.

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. Definition at line 251 of file memory.

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 333 of file memory.

## 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 284 of file memory.

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

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 262 of file memory.

template<typename _Tp>
template<typename _Tp1>
std::auto_ptr< _Tp >::operator auto_ptr | ( |  | ) | 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 352 of file memory.

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

template<typename _Tp>
template<typename _Tp1>
std::auto_ptr< _Tp >::operator auto_ptr_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 348 of file memory.

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

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 271 of file memory.

template<typename _Tp>
auto_ptr& std::auto_ptr< _Tp >::operator= | ( | 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 337 of file memory.

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

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

%auto_ptr assignment operator.

Parameters:

  a | Another %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 ownsership. The object that this one used to own and track has been deleted.

Definition at line 233 of file memory.

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

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

%auto_ptr assignment operator.

Parameters:

  a | Another %auto_ptr of the same type.

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

Definition at line 215 of file memory.

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 298 of file memory.

References std::auto_ptr< _Tp >::element_type .

Referenced by std::auto_ptr< _Tp >::operator auto_ptr() , and std::auto_ptr< _Tp >::operator auto_ptr_ref() .

template<typename _Tp>
void std::auto_ptr< _Tp >::reset | ( | element_type * | __p = 0 | ) | throw ()`[inline]`

Forcibly deletes the managed object.

Parameters:

  p | A pointer (defaults to NULL).

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

Definition at line 313 of file memory.

References std::auto_ptr< _Tp >::element_type .

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

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

- memory