Content deleted Content added
m format fix |
mNo edit summary |
||
Line 1:
{{wrongtitle|title=auto_ptr}}
'''auto_ptr''' is a [[Template (programming) | template]] class available in the [[C_plus_plus|C++]] [[C Plus Plus standard library | Standard Library]] (declared in '''<memory>''') that provides some basic [[Resource Acquisition Is Initialization | RAII]] features for [[Pointers#C.2FC.2B.2B | C++ raw pointers]].
== Definition ==
The auto_ptr class is defined in [[ISO/IEC 14882]], section 20.4.5 as:
namespace std {
template <class Y> struct auto_ptr_ref {};
template<class X>
class auto_ptr {
public:
typedef X element_type;
// 20.4.5.1 construct/copy/destroy:
explicit auto_ptr(X* p =0) throw();
auto_ptr(auto_ptr&) throw();
template<class Y> auto_ptr(auto_ptr<Y>&) throw();
auto_ptr& operator=(auto_ptr&) throw();
template<class Y> auto_ptr& operator=(auto_ptr<Y>&) throw();
auto_ptr& operator=(auto_ptr_ref<X> r) throw();
~auto_ptr() throw();
// 20.4.5.2 members:
X& operator*() const throw();
X* operator->() const throw();
X* get() const throw();
X* release() throw();
void reset(X* p =0) throw();
// 20.4.5.3 conversions:
auto_ptr(auto_ptr_ref<X>) throw();
template<class Y> operator auto_ptr_ref<Y>() throw();
template<class Y> operator auto_ptr<Y>() throw();
};
}
== Semantics ==
The auto_ptr has semantics of strict ownership, meaning that the auto_ptr instance is the sole responsible for the object's life-time. If an auto_ptr is copied, the source loses the reference. For example:
int *i = new int;
auto_ptr<int> x(i);
auto_ptr<int> y;
y = x;
cout << x.get() << endl;
cout << y.get() << endl;
This code will print a [[Null (Computer) | NULL]] reference for the first auto_ptr object and some address for the second, showing that the source object lost the reference during the assignment (''=''). The raw pointer ''i'' in the example should not be deleted, as it will be deleted by the auto_ptr that owns the reference.
Notice that the object pointed by an auto_ptr is destructed using ''operator delete''; this means that you should only use auto_ptr for pointers obtained with ''operator new''. This excludes pointers returned by [[malloc|malloc/calloc/realloc]] and ''operator new[]''.
{{uncategorized}}
|