std::auto_ptr
1.std::auto_ptr::auto_ptr
explicit auto_ptr (X* p=0) throw(); auto_ptr (auto_ptr& a) throw(); template<class Y> auto_ptr (auto_ptr<Y>& a) throw(); auto_ptr (auto_ptr_ref<X> r) throw();
Explain:
Constructs an auto_ptr object either from a pointer or from another auto_ptr object.
Since auto_ptr objects take ownership of the pointer they point to, when a new auto_ptr is constructed from another auto_ptr, the former owner releases it.
Example:
#include <iostream>
#include <memory>
int main ()
{
std::auto_ptr<int> p1 (new int);
*p1.get()=10;
std::auto_ptr<int> p2 (p1);
std::cout << "p2 points to " << *p2 << '\n';
// (p1 is now null-pointer auto_ptr)
return 0;
}
Output:p2 points to 10
2.std::auto_ptr::~auto_ptr()
~auto_ptr() throw();
Explain:
Destroy auto_ptr
Deallocates the block of memory the object
"points to" using
delete (
delete get()) and destructs the object.
3.std::auto_ptr::get
X* get() const throw(); Expalin:
Get pointer
Returns a pointer to the object pointed by the
auto_ptr object, if any, or zero if it does not point to any object.
Example:
#include <iostream>
#include <memory>
int main ()
{
std::auto_ptr<int> p (new int);
*p.get() = 100;
std::cout << "p points to " << *p.get() << '\n';
return 0;
}
4.std::auto_ptr::reset
void reset (X* p=0) throw(); Explain:
Deallocate object pointed and set new value
Destructs the object pointed by the
auto_ptr object, if any, and deallocates its memory (by calling
operator delete). If a value for
p is specified, the internal pointer is initialized to that value (otherwise it is set to the
null pointer).
To only release the ownership of a pointer without destructing the object pointed by it, use member function release instead.
Example:
#include <iostream>
#include <memory>
int main () {
std::auto_ptr<int> p;
p.reset (new int);
*p=5;
std::cout << *p << '\n';
p.reset (new int);
*p=10;
std::cout << *p << '\n';
return 0;
}
Output : 5 10
5.std::auto_ptr::release
X* release() throw(); Explain:
Release pointer
Sets the
auto_ptr internal pointer to
null pointer (which indicates it points to no object) without destructing the object currently pointed by the
auto_ptr.
To force a destruction of the object pointed, use member function reset() instead.
The function returns a pointer to the object it pointed before the call, which is no longer its responsibility to destruct.
Example:
#include <iostream> #include <memory> int main () { std::auto_ptr<int> auto_pointer (new int); int * manual_pointer; *auto_pointer=10; manual_pointer = auto_pointer.release(); std::cout << "manual_pointer points to " << *manual_pointer << '\n'; // (auto_pointer is now null-pointer auto_ptr) delete manual_pointer; return 0; } Output:
manual_pointer points to 10