Compartir a través de


Clase CAutoPtr

Esta clase representa un objeto de puntero inteligente.

Importante

Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.

Sintaxis

template <typename T>
class CAutoPtr

Parámetros

T
Tipo de puntero.

Miembros

Constructores públicos

Nombre Descripción
CAutoPtr::CAutoPtr Constructor .
CAutoPtr::~CAutoPtr El destructor .

Métodos públicos

Nombre Descripción
CAutoPtr::Attach Llame a este método para asumir la propiedad de un puntero existente.
CAutoPtr::Detach Llame a este método para liberar la propiedad de un puntero.
CAutoPtr::Free Llame a este método para eliminar un objeto al que CAutoPtr apunta.

Operadores públicos

Nombre Descripción
CAutoPtr::operator T* El operador de conversión.
CAutoPtr::operator = Operador de asignación.
CAutoPtr::operator -> Operador de puntero a miembro.

Miembros de datos públicos

Nombre Descripción
CAutoPtr::m_p Variable de miembro de datos del puntero.

Comentarios

Esta clase proporciona métodos para crear y administrar un puntero inteligente. Los punteros inteligentes ayudan a protegerse frente a pérdidas de memoria liberando automáticamente los recursos cuando se queda fuera del ámbito.

Además, el constructor de copia y el operador de asignación de CAutoPtr transfieren la propiedad del puntero, copiando el puntero de origen al puntero de destino y estableciendo el puntero de origen en NULL. Por eso es imposible tener dos objetos CAutoPtr almacenando el mismo puntero, y reduce la posibilidad de eliminar el mismo puntero dos veces.

CAutoPtr también simplifica la creación de colecciones de punteros. En lugar de derivar una clase de colección y reemplazar el destructor, es más sencillo crear una colección de objetos CAutoPtr. Cuando se elimina la colección, los objetos CAutoPtr quedarán fuera del ámbito y se eliminarán automáticamente.

Las variantes y CHeapPtr funcionan de la misma manera que CAutoPtr, salvo que asignan y liberan memoria mediante diferentes funciones de montón en lugar de los operadores de C++ new y delete. CAutoVectorPtr es similar a CAutoPtr, la única diferencia es que usa vector new[] y vector delete[] para asignar y liberar memoria.

Vea también CAutoPtrArray y CAutoPtrList cuándo se requieren matrices o listas de punteros inteligentes.

Requisitos

Encabezado: atlbase.h

Ejemplo

// A simple class for demonstration purposes

class MyClass 
{
   int iA;
   int iB;
public:
   MyClass(int a, int b);
   void Test();
};

MyClass::MyClass(int a, int b)
{
   iA = a;
   iB = b;
}

void MyClass::Test()
{
   ATLASSERT(iA == iB);
}

// A simple function

void MyFunction(MyClass* c)
{
   c->Test();
}

int UseMyClass()
{
   // Create an object of MyClass.
   MyClass *pMyC = new MyClass(1, 1);

   // Create a CAutoPtr object and have it take
   // over the pMyC pointer by calling Attach.
   CAutoPtr<MyClass> apMyC;
   apMyC.Attach(pMyC);

   // The overloaded -> operator allows the 
   // CAutoPtr object to be used in place of the pointer.
   apMyC->Test();

   // Assign a second CAutoPtr, using the = operator.
   CAutoPtr<MyClass> apMyC2;
   apMyC2 = apMyC;

   // The casting operator allows the
   // object to be used in place of the pointer.
   MyFunction(pMyC);
   MyFunction(apMyC2);

   // Detach breaks the association, so after this
   // call, pMyC is controlled only by apMyC.
   apMyC2.Detach();

   // CAutoPtr destroys any object it controls when it
   // goes out of scope, so apMyC destroys the object 
   // pointed to by pMyC here.
   return 0;
}

CAutoPtr::Attach

Llame a este método para asumir la propiedad de un puntero existente.

void Attach(T* p) throw();

Parámetros

p
El objeto CAutoPtr asumirá la propiedad de este puntero.

Comentarios

Cuando un objeto CAutoPtr asume la propiedad de un puntero, eliminará automáticamente el puntero y los datos asignados cuando salgan del ámbito. Si se llama a CAutoPtr::Detach, el programador vuelve a tener la responsabilidad de liberar los recursos asignados.

En las compilaciones de depuración, se producirá un error de aserción si miembro de datos CAutoPtr::m_p ya apunta a un valor existente, es decir, no es igual a NULL.

Ejemplo

Consulte el ejemplo en Información general de CAutoPtr.

CAutoPtr::CAutoPtr

Constructor .

CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();

template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();

template<>
CAutoPtr(CAutoPtr<T>& p) throw();

Parámetros

p
Un puntero existente.

TSrc
Tipo administrado por otro constructor CAutoPtr, que se usa para inicializar el objeto actual.

Comentarios

El objeto CAutoPtr se puede crear mediante un puntero existente, en cuyo caso transfiere la propiedad del puntero.

Ejemplo

Consulte el ejemplo en Información general de CAutoPtr.

CAutoPtr::~CAutoPtr

El destructor .

~CAutoPtr() throw();

Comentarios

Libera los recursos asignados. Llama a CAutoPtr::Free.

CAutoPtr::Detach

Llame a este método para liberar la propiedad de un puntero.

T* Detach() throw();

Valor devuelto

Devuelve una copia del puntero.

Comentarios

Libera la propiedad de un puntero, establece la variable miembro de datos de CAutoPtr::m_p en NULL y devuelve una copia del puntero. Después de llamar a Detach, el programador puede liberar los recursos asignados sobre los que el objeto CAutoPtr puede haber asumido previamente la responsabilidad.

Ejemplo

Consulte el ejemplo en Información general de CAutoPtr.

CAutoPtr::Free

Llame a este método para eliminar un objeto al que CAutoPtr apunta.

void Free() throw();

Comentarios

El objeto al que señala CAutoPtr está liberado y la variable de miembro de datos CAutoPtr::m_p se establece en NULL.

CAutoPtr::m_p

Variable de miembro de datos del puntero.

T* m_p;

Comentarios

Esta variable miembro contiene la información del puntero.

CAutoPtr::operator =

Operador de asignación.

template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);

template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);

Parámetros

p
Un puntero .

TSrc
Tipo de clase.

Valor devuelto

Devuelve una referencia a CAutoPtr< T >.

Comentarios

El operador de asignación desasocia el objeto CAutoPtr de cualquier puntero actual y adjunta el nuevo puntero, p, en su lugar.

Ejemplo

Consulte el ejemplo en Información general de CAutoPtr.

CAutoPtr::operator ->

Operador de puntero a miembro.

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

Valor devuelto

Devuelve el valor de la variable miembro de datos de CAutoPtr::m_p.

Comentarios

Use este operador para llamar a un método de una clase a la que apunta el objeto CAutoPtr. En las compilaciones de depuración, se producirá un error de aserción si CAutoPtr apunta a NULL.

Ejemplo

Consulte el ejemplo en Información general de CAutoPtr.

CAutoPtr::operator T*

El operador de conversión.

operator T* () const throw();

Valor devuelto

Devuelve un puntero al tipo de datos de objeto definido en la plantilla de clase.

Ejemplo

Consulte el ejemplo en Información general de CAutoPtr.

Consulte también

Clase CHeapPtr
Clase CAutoVectorPtr
Información general de clases