auto_ptr全解

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值