std::auto_ptr智能指针使用

此篇博文记录编码过程中遇到的有关智能指针std::auto_ptr的使用方法,由于是记录使用过程中遇到的方法所以不会将该智能指针的全部方法简绍清楚,有关std::auto_ptr的详细教程请参考相应的教程。

1、reset(pam)方法:使用pam重置智能指针,如:
std::auto_ptr message;
message.reset(mFifo.getNext());
上面的使用过程中message是一个智能指针对象,执行reset(mFifo.getNext())方法后会使智能指针指向mFifo.getNext()所返回的对象,同时调用智能指针之前指向对象的析构函数,将之前对象析构掉。

下面是MSDN中的举例解释:

// auto_ptr_reset.cpp
// compile with: /EHsc
#include 
#include 
#include 

using namespace std;

class Int 
{
public:
   Int( int i ) 
   {
      x = i;
      cout << "Constructing " << ( void* )this << " Value: " << x << endl; 
   };
   ~Int( ) 
   {
      cout << "Destructing " << ( void* )this << " Value: " << x << endl; 
   };

   int x;
};

int main( ) 
{
   auto_ptr pi ( new Int( 5 ) );
   pi.reset( new Int( 6 ) );
   Int* pi2 = pi.get ( );
   Int* pi3 = pi.release ( );
   if ( pi2 == pi3 )
      cout << "pi2 == pi3" << endl;
   delete pi3;
}

运行结果:
Constructing 00311AF8 Value: 5
Constructing 00311B88 Value: 6
Destructing 00311AF8 Value: 5
pi2 == pi3
Destructing 00311B88 Value: 6

2、release()方法:
作用是释放该智能指正对其所指向的对象的控制权限,并返回其指向对象的指针,同样我们通过MSDN中的案例深入理解

// auto_ptr_release.cpp
// compile with: /EHsc
#include 
#include 
#include 
using namespace std;

class Int 
{
public:
   Int( int i ) 
   {
      x = i;
      cout << "Constructing " << ( void* )this << " Value: " << x << endl; 
   };
   ~Int( ) {
      cout << "Destructing " << ( void* )this << " Value: " << x << endl; 
   };

   int x;

};

int main( ) 
{
   auto_ptr pi ( new Int( 5 ) );
   pi.reset( new Int( 6 ) );
   Int* pi2 = pi.get ( );
   Int* pi3 = pi.release ( );
   if ( pi2 == pi3 )
      cout << "pi2 == pi3" << endl;
   delete pi3;
}

输出:

Constructing 00311AF8 Value: 5
Constructing 00311B88 Value: 6
Destructing 00311AF8 Value: 5
pi2 == pi3
Destructing 00311B88 Value: 6

你可能感兴趣的:(C++)