Clase de CAutoPtr
Esta clase representa un objeto de puntero inteligente.
Importante |
---|
Esta clase y sus miembros no se pueden utilizar en las aplicaciones que se ejecutan en Windows en tiempo de ejecución. |
template<
typename T
>
class CAutoPtr
Parámetros
- T
el tipo de puntero.
Members
Constructores públicos
Name |
Descripción |
---|---|
el constructor. |
|
El destructor. |
Métodos públicos
Name |
Descripción |
---|---|
Llame a este método para realizar la propiedad de un puntero existente. |
|
Llame a este método para liberar la propiedad de un puntero. |
|
Llame a este método para eliminar un objeto señala CAutoPtr. |
Operadores públicos
Name |
Descripción |
---|---|
El operador de conversión. |
|
el operador de asignación. |
|
El operador de puntero a miembro. |
Miembros de datos públicos
Name |
Descripción |
---|---|
La variable miembro de datos de puntero. |
Comentarios
Esta clase proporciona métodos para crear y administrar un puntero inteligente, que ayuda a protegerse frente a pérdidas de memoria automáticamente libera los recursos cuando está fuera de ámbito.
Además, el constructor de copias de entity_CODECAutoPtr y el operador de asignación transfiere la propiedad del puntero, copiando el puntero de origen al puntero de destino y estableciendo el puntero de origen en NULL.Por consiguiente imposible obtener dos objetos cada uno de CAutoPtr que almacena el mismo puntero, y esto 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 de reemplazar el destructor, es más fácil crear una colección de objetos CAutoPtr .Cuando se elimina la colección, los objetos de CAutoPtr saldrán de ámbito y automáticamente se eliminarán.
CHeapPtr y las variantes funcionan igual que CAutoPtr, salvo que asignan y liberan memoria mediante diferente pila funciona en lugar de C++ nuevo y operadores de borrar .CAutoVectorPtr es similar a CAutoPtr, la única diferencia es que utiliza vector new[] y vector delete[] para asignar y liberar memoria.
Vea también CAutoPtrArray y CAutoPtrList cuando las matrices o listas de punteros inteligentes se requieren.
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;
}