STD::AUTO_PTR(3cxx)
π¦ std::auto_ptr< _Tp > β NAME π¦
okay so bestie, welcome to std::auto_ptr< _Tp > β the 3cxx manual page, straight out of libstdc++. it's a simple smart pointer that provides strict ownership semantics. that's the whole vibe. β¨
πΈ SYNOPSIS πΈ
#include <memory>
π Public Types π
typedef _Tp element_typeβ literally just the pointed-to type. the type of the thing being pointed at. that's it, that's the typedef. π
π«Ά Public Member Functions π«Ά
auto_ptr (auto_ptr &__a)throw ()β anauto_ptrcan be constructed from anotherauto_ptr. yes, from another one. πtemplate<typename _Tp1 > auto_ptr (auto_ptr< _Tp1 > &__a)throw ()β anauto_ptrcan be constructed from anotherauto_ptr(this one's the templated flavor, different-ish type energy). π¦auto_ptr (auto_ptr_ref< element_type > __ref)throw ()β automatic conversions, bestie. πͺauto_ptr (element_type *__p=0)throw ()β anauto_ptris usually constructed from a raw pointer. classic. π~auto_ptr ()β the destructor. it exists. πelement_type * get () constthrow ()β bypassing the smart pointer. πtemplate<typename _Tp1 > operator auto_ptr< _Tp1 > ()throw ()β conversion operator, no notes. πtemplate<typename _Tp1 > operator auto_ptr_ref< _Tp1 > ()throw ()β conversion operator to the ref thingy. πelement_type & operator* () constthrow ()β smart pointer dereferencing. βelement_type * operator-> () constthrow ()β smart pointer dereferencing, the arrow edition. βauto_ptr & operator= (auto_ptr &__a)throw ()βauto_ptrassignment operator. πtemplate<typename _Tp1 > auto_ptr & operator= (auto_ptr< _Tp1 > &__a)throw ()βauto_ptrassignment operator, templated version. πauto_ptr & operator= (auto_ptr_ref< element_type > __ref)throw ()β assignment from the ref. πelement_type * release ()throw ()β bypassing the smart pointer. πͺvoid reset (element_type *__p=0)throw ()β forcibly deletes the managed object. no cap, forcibly. π₯
π Detailed Description π
template<typename _Tp>
class std::auto_ptr< _Tp >
"A simple smart pointer providing strict ownership semantics." β¨
the Standard says β and I'm quoting here because the Standard is the main character:
Anauto_ptrowns the object it holds a pointer to. Copying anauto_ptrcopies the pointer and transfers ownership to the destination. If more than oneauto_ptrowns the same object at the same time the behavior of the program is undefined. The uses ofauto_ptrinclude 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_ptrdoes not meet the CopyConstructible and Assignable requirements for Standard Library container elements and thus instantiating a Standard Library container with anauto_ptrresults 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, if you're nosy like that. π
_GLIBCXX_RESOLVE_LIB_DEFECTS
127.βauto_ptr<>conversion issues. These resolutions have all been incorporated. β
Deprecated
π¨ Deprecated in C++11, no longer in the standard since C++17. Use unique_ptr instead. π¨
like, for real, bestie. she's retired. use unique_ptr. π
π§ Member Typedef Documentation π§
template<typename _Tp > typedef _Tp std::auto_ptr< _Tp >::element_type
the pointed-to type. the type being pointed to. the whole point of the pointer. π
π· Constructor & Destructor Documentation π·
template<typename _Tp > std::auto_ptr< _Tp >::auto_ptr (element_type * __p = 0) [inline], [explicit]
an auto_ptr is usually constructed from a raw pointer. π±
Parameters
__pβ a pointer (defaults toNULL).
this object now owns the object pointed to by __p. π«Ά
template<typename _Tp > std::auto_ptr< _Tp >::auto_ptr (auto_ptr< _Tp > & __a) [inline]
an auto_ptr can be constructed from another auto_ptr. π
Parameters
__aβ anotherauto_ptrof the same type.
this object now owns the object previously owned by __a, which has given up ownership. the way she just hands it over, iconic. π
template<typename _Tp > template<typename _Tp1 > std::auto_ptr< _Tp >::auto_ptr (auto_ptr< _Tp1 > & __a) [inline]
an auto_ptr can be constructed from another auto_ptr. π but make it templated.
Parameters
__aβ anotherauto_ptrof 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. π«΄
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 π§
template<typename _Tp > std::auto_ptr< _Tp >::auto_ptr (auto_ptr_ref< element_type > __ref) [inline]
automatic conversions. these operations are supposed to convert an auto_ptr into and from an auto_ptr_ref automatically as needed. this would allow constructs such as πͺ
auto_ptr<Derived> func_returning_auto_ptr(.....);
...
auto_ptr<Base> ptr = func_returning_auto_ptr(.....);
but it doesn't work, and won't be fixed. π for further details see http://cplusplus.github.io/LWG/lwg-closed.html#463
β Member Function Documentation β
template<typename _Tp > element_type * std::auto_ptr< _Tp >::get () const [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. π«Ά
template<typename _Tp > element_type & std::auto_ptr< _Tp >::operator* () const [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...) ππ
template<typename _Tp > element_type * std::auto_ptr< _Tp >::operator-> () const [inline]
smart pointer dereferencing. β this returns the pointer itself, which the language then will automatically cause to be dereferenced. the compiler does the β¨ work β¨ for you. πͺ
template<typename _Tp > auto_ptr & std::auto_ptr< _Tp >::operator= (auto_ptr< _Tp > & __a) [inline]
auto_ptr assignment operator. π
Parameters
__aβ anotherauto_ptrof 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. ποΈ
References std::auto_ptr< _Tp >::reset().
template<typename _Tp > template<typename _Tp1 > auto_ptr & std::auto_ptr< _Tp >::operator= (auto_ptr< _Tp1 > & __a) [inline]
auto_ptr assignment operator. π templated. same energy, new type.
Parameters
__aβ anotherauto_ptrof 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. ποΈ
References std::auto_ptr< _Tp >::reset().
template<typename _Tp > element_type * std::auto_ptr< _Tp >::release () [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. π«₯
template<typename _Tp > void std::auto_ptr< _Tp >::reset (element_type * __p = 0) [inline]
forcibly deletes the managed object. π₯ yes, forcibly. she said what she said.
Parameters
__pβ a pointer (defaults toNULL).
this object now owns the object pointed to by __p. the previous object has been deleted. ποΈ
Referenced by std::auto_ptr< _Tp >::operator=(), and std::auto_ptr< _Tp >::operator=().
π Author π
generated automatically by Doxygen for libstdc++ from the source code. π€ no thoughts, head empty, just docs generation.
that's the whole page, bestie!! π it came to you from libstdc++, the std::auto_ptr< _Tp > (3cxx) manual β mwah, slay, go use unique_ptr instead ππ
β¨
π¦ where this page comes from
- ubuntu noble: libstdc++-14-doc 14-20240412-0ubuntu1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms