The Standard says:
Anauto_ptr
owns the object it holds a pointer to. Copying anauto_ptr
copies the pointer and transfers ownership to the destination. If more than oneauto_ptr
owns the same object at the same time the behavior of the program is undefined.
The uses ofQuoted from [20.4.5]/3.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 anauto_ptr
results in undefined behavior.
Good examples of what can and cannot be done with auto_ptr can be found in the libstdc++ testsuite.
_GLIBCXX_RESOLVE_LIB_DEFECTS 127. auto_ptr<> conversion issues These resolutions have all been incorporated.
Definition at line 90 of file auto_ptr.h.
typedef _Tp std::auto_ptr< _Tp >::element_type |
std::auto_ptr< _Tp >::auto_ptr | ( | element_type * | __p = 0 |
) | throw () [inline, explicit] |
An auto_ptr is usually constructed from a raw pointer.
p | A pointer (defaults to NULL). |
Definition at line 106 of file auto_ptr.h.
std::auto_ptr< _Tp >::auto_ptr | ( | auto_ptr< _Tp > & | __a | ) | throw () [inline] |
An auto_ptr can be constructed from another auto_ptr.
a | Another auto_ptr of the same type. |
Definition at line 115 of file auto_ptr.h.
std::auto_ptr< _Tp >::auto_ptr | ( | auto_ptr< _Tp1 > & | __a | ) | throw () [inline] |
An auto_ptr can be constructed from another auto_ptr.
a | Another auto_ptr of a different but related type. |
This object now owns the object previously owned by a, which has given up ownership.
Definition at line 128 of file auto_ptr.h.
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 173 of file auto_ptr.h.
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 263 of file auto_ptr.h.
element_type* std::auto_ptr< _Tp >::get | ( | void | ) | const throw () [inline] |
Bypassing the smart pointer.
Definition at line 214 of file auto_ptr.h.
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 184 of file auto_ptr.h.
References _GLIBCXX_DEBUG_ASSERT.
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 197 of file auto_ptr.h.
References _GLIBCXX_DEBUG_ASSERT.
auto_ptr& std::auto_ptr< _Tp >::operator= | ( | auto_ptr< _Tp1 > & | __a | ) | throw () [inline] |
auto_ptr assignment operator.
a | Another auto_ptr of a different but related 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 157 of file auto_ptr.h.
References std::auto_ptr< _Tp >::release().
auto_ptr& std::auto_ptr< _Tp >::operator= | ( | auto_ptr< _Tp > & | __a | ) | throw () [inline] |
auto_ptr assignment operator.
a | Another auto_ptr of the same type. |
Definition at line 139 of file auto_ptr.h.
References std::auto_ptr< _Tp >::release().
element_type* std::auto_ptr< _Tp >::release | ( | ) | throw () [inline] |
Bypassing the smart pointer.
Definition at line 228 of file auto_ptr.h.
Referenced by std::tr1::__shared_count< _Lp >::__shared_count(), std::__shared_count< _Lp >::__shared_count(), and std::auto_ptr< _Tp >::operator=().
void std::auto_ptr< _Tp >::reset | ( | element_type * | __p = 0 |
) | throw () [inline] |
Forcibly deletes the managed object.
p | A pointer (defaults to NULL). |
Definition at line 243 of file auto_ptr.h.