auto_ptr (Clase)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Encapsula un puntero inteligente en torno a un recurso que garantiza que el recurso se destruye automáticamente cuando el control abandona un bloque.

La clase unique_ptr de mayor capacidad reemplaza a auto_ptr. Para obtener más información, consulte unique_ptr (clase).

Para obtener más información acerca de throw() y control de excepciones, vea especificaciones de excepciones (throw).

class auto_ptr {  
  public:  
  typedef Type element_type;  
  explicit auto_ptr(Type* ptr = 0) throw();
  auto_ptr(auto_ptr<Type>& right) throw()
  ;  
  template <class Other>  
  operator auto_ptr<Other>() throw();
  template <class Other>  
  auto_ptr<Type>& operator=(auto_ptr<Other>& right) throw();
  template <class Other>  
  auto_ptr(auto_ptr<Other>& right);
  auto_ptr<Type>& operator=(auto_ptr<Type>& right);
  ~auto_ptr();
  Type& operator*() const throw();
  Type * operator->()const throw();
  Type *get() const throw();
  Type *release()throw();
  void reset(Type* ptr = 0);
  };  

Parámetros

right
auto_ptr desde el que se va a obtener un recurso existente.

ptr
Puntero especificado para reemplazar el puntero almacenado.

La clase de plantilla describe un puntero inteligente, llamado auto_ptr, en un objeto asignado. El puntero debe ser nulo o designar un objeto asignado por new. auto_ptr transfiere la propiedad si su valor almacenado se asigna a otro objeto. (Reemplaza el valor almacenado después de una transferencia con un puntero nulo). El destructor de auto_ptr<Type> elimina el objeto asignado. auto_ptr<Type> garantiza que un objeto asignado se elimina automáticamente cuando el control abandona un bloque, incluso a través de una excepción producida. No debe construir dos objetos auto_ptr<Type> que posean el mismo objeto.

Puede pasar un objeto auto_ptr<Type> por valor como argumento a una llamada de función. auto_ptr no puede ser un elemento de ningún contenedor de la biblioteca estándar. No puede administrar de manera fiable una secuencia de objetos auto_ptr<Type> con un contenedor de la biblioteca de plantillas estándar.

Constructores

auto_ptrConstructor para los objetos de tipo auto_ptr.

Definiciones de tipo

ELEMENT_TYPEEl tipo es un sinónimo del parámetro de plantilla Type.

Funciones miembro

getLa función miembro devuelve el puntero myptr almacenado.
la versiónEl miembro reemplaza el puntero myptr almacenado con un puntero nulo y devuelve el puntero almacenado previamente.
RestablecerLa función miembro evalúa la expresión delete myptr, pero solo si el valor de puntero myptr almacenado cambia como consecuencia de la llamada de función. A continuación, reemplaza el puntero almacenado con ptr.

Operadores

operador =Operador de asignación que transfiere la propiedad de un objeto auto_ptr a otro.
operador *Operador de desreferenciación para objetos de tipo auto_ptr.
operador->Operador para permitir el acceso a miembros.
auto_ptr (operador)<>>Convierte de un tipo de auto_ptr a otro tipo de auto_ptr.
operador auto_ptr_ref<>>Convierte de auto_ptr a auto_ptr_ref.

Encabezado:<>>

Espacio de nombres: std

Constructor para los objetos de tipo auto_ptr.

 
explicit auto  
_  
ptr(Type* 
    ptr 
= 0) throw();

auto  
_  
ptr(auto 
_  
ptr<Type>& 
    right) throw();

auto  
_  
ptr(auto 
_  
ptr  
_  
ref<Type>   
    right) throw();

template <class Other>  
auto 
_  
ptr(auto 
_  
ptr<Other>& 
    right) throw();

Parámetros

ptr
El puntero al objeto que auto_ptr encapsula.

right
La auto_ptr objeto que se copiará el constructor.

Comentarios

Los almacenes de constructor primera ptr en myptr, el puntero almacenado en el objeto asignado. El segundo constructor transfiere la propiedad del puntero almacenado en right, almacenando right. la versión en myptr.

El tercer constructor comporta igual que el segundo, salvo que almacena derecho. refOperador la versión en myptr, donde ref es la referencia que se almacena en right.

El constructor de la plantilla comporta igual que el segundo constructor, siempre que un puntero a otros puede convertirse implícitamente a un puntero a tipo.

Ejemplo

// auto_ptr_auto_ptr.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
using namespace std;  
  
class Int   
{  
public:  
   Int(int i)   
   {  
      cout << "Constructing " << ( void* )this  << endl;   
      x = i;  
      bIsConstructed = true;  
   };  
   ~Int( )   
   {  
      cout << "Destructing " << ( void* )this << endl;   
      bIsConstructed = false;  
   };  
   Int &operator++( )   
   {  
      x++;  
      return *this;  
   };  
   int x;  
private:  
   bool bIsConstructed;  
};  
  
void function ( auto_ptr<Int> &pi )  
{  
   ++( *pi );  
   auto_ptr<Int> pi2( pi );  
   ++( *pi2 );  
   pi = pi2;  
}  
  
int main( )   
{  
   auto_ptr<Int> pi ( new Int( 5 ) );  
   cout << pi->x << endl;  
   function( pi );  
   cout << pi->x << endl;  
}  

Constructing 00311AF8  
5  
7  
Destructing 00311AF8  

El tipo es un sinónimo del parámetro de plantilla tipo.

 
typedef Type element  
_  
type;  

La función miembro devuelve el puntero almacenado myptr.

 
Type *get() const throw();

Valor devuelto

El puntero almacenado myptr.

Ejemplo

// auto_ptr_get.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
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<Int> 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  

Operador de asignación que transfiere la propiedad de un objeto auto_ptr a otro.

template <class Other>  
auto_ptr<Type>& operator=(auto_ptr<Other>& right) throw();

auto_ptr<Type>& operator=(auto_ptr<Type>& right) throw();

auto_ptr<Type>& operator=(auto_ptr_ref<Type>  
right) throw();

Parámetros

right
Objeto de tipo auto_ptr.

Valor devuelto

Una referencia a un objeto de tipo auto_ptr < tipo>.

Comentarios

La asignación evalúa la expresión eliminar myptr, pero solo si el puntero almacenado myptr cambios como resultado de la asignación. A continuación, transfiere la propiedad del puntero almacenado en _ derecha, almacenando _ derecha. la versión en myptr. La función devuelve ** *esto**.

Ejemplo

Para obtener un ejemplo del uso del operador de miembro, consulte auto_ptr:: auto_ptr.

Operador de desreferenciación para objetos de tipo auto_ptr.

 
Type& operator*() const throw();

Valor devuelto

Una referencia a un objeto de tipo tipo que posee el puntero.

Comentarios

El operador de direccionamiento indirecto devuelve * obtener. Por lo tanto, el puntero almacenado no debe ser null.

Ejemplo

Para obtener un ejemplo de cómo utilizar la función miembro, vea auto_ptr:: auto_ptr.

Operador para permitir el acceso a miembros.

 
Type * operator->() const throw();

Valor devuelto

Un miembro del objeto que auto_ptr posee.

Comentarios

Devuelve el operador de selección obtener( ), de modo que la expresión ap-> miembro se comporta igual que ( ap. get( ) )-> member, where ap is an object of class auto_ptr< Type>. Por lo tanto, el puntero almacenado no debe ser null, y tipo debe ser una clase, struct o tipo de unión con una miembro miembro.

Ejemplo

Para obtener un ejemplo de cómo utilizar la función miembro, vea auto_ptr:: auto_ptr.

Convierte de un tipo de auto_ptr a otro tipo de auto_ptr.

 
template <class Other>  
operator auto 
_  
ptr<Other>() throw();

Valor devuelto

Convertir el tipo del operador devuelve auto_ptr < otros> ( ** *esto**).

Ejemplo

// auto_ptr_op_auto_ptr.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
using namespace std;  
int main()  
{  
   auto_ptr<int> pi ( new int( 5 ) );  
   auto_ptr<const int> pc = ( auto_ptr<const int> )pi;  
}  

Convierte de una auto_ptr a una auto_ptr_ref.

 
template <class Other>  
operator auto 
_  
ptr  
_  
ref<Other>() throw();

Valor devuelto

Convertir el tipo del operador devuelve auto_ptr_ref< otros> ( ** *esto**).

Ejemplo

// auto_ptr_op_auto_ptr_ref.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
using namespace std;  
  
class C{  
   public:  
   C(int _i) : m_i(_i){  
   }  
   ~C(){  
      cout << "~C:  "<< m_i <<"\n";  
   }  
   C &operator =(const int &x){  
      m_i = x;  
      return *this;  
   }  
   int m_i;  
};  
void f(auto_ptr<C> arg ){  
};  
int main()  
{  
   const auto_ptr<C> ciap ( new C(1) );  
   auto_ptr<C> iap ( new C(2) );  
  
   // Error: this implies transfer of ownership of iap's pointer  
   // f(ciap);   
   f(iap); // compiles, but gives up ownership of pointer  
  
   // here, iap owns a destroyed pointer so the following is bad:  
   // *iap = 5; // BOOM  
  
   cout << "main exiting\n";  
}  

~C:  2  
main exiting  
~C:  1  

El miembro reemplaza el puntero almacenado myptr con un puntero null y devuelve el puntero almacenado previamente.

 
Type *release() throw();

Valor devuelto

El puntero almacenado previamente.

Comentarios

El miembro reemplaza el puntero almacenado myptr con un puntero null y devuelve el puntero almacenado previamente.

Ejemplo

// auto_ptr_release.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
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<Int> 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  

La función miembro evalúa la expresión eliminar myptr, pero sólo si el valor del puntero almacenado myptr cambios como resultado de una llamada de función. A continuación, reemplaza el puntero almacenado con ptr.

 
void reset(Type* 
    ptr = 0);

Parámetros

ptr
El puntero especificado para reemplazar el puntero almacenado myptr.

Ejemplo

// auto_ptr_reset.cpp  
// compile with: /EHsc  
#include <memory>  
#include <iostream>  
#include <vector>  
  
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<Int> 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  

Seguridad para subprocesos en la biblioteca estándar de C++
unique_ptr (clase)

Mostrar: