auto_ptr全解

来源:互联网 发布:oracle 数据库用户权限 编辑:程序博客网 时间:2024/05/16 04:19

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 anotherauto_ptr object.
   Since auto_ptr objects take ownership of the pointer they point to, when a newauto_ptr is constructed from another auto_ptr, the former ownerreleases 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 callingoperator delete). If a value for p is specified, the internal pointer is initialized to that value (otherwise it is set to thenull pointer).

To only release the ownership of a pointer without destructing the object pointed by it, use member functionrelease 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 theauto_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