Partilhar via


Classe CAutoPtr

Esta classe representa um objeto de ponteiro SMART.

template< 
   typename T
>
class CAutoPtr

Parâmetros

  • T
    O tipo de ponteiro.

Comentários

Essa classe fornece métodos para criar e gerenciar um ponteiro SMART, que ajudará a proteger contra vazamentos de memória, liberando os recursos automaticamente quando ele ficar fora do escopo.

Além disso, CAutoPtrdo construtor de cópia e atribuição operador transferência de propriedade do ponteiro, copiando o ponteiro de fonte para o ponteiro de destino e definindo o ponteiro de fonte como nulo. Portanto, é impossível ter dois CAutoPtr objetos cada armazenando o mesmo ponteiro, e isso reduz a possibilidade de excluir o mesmo ponteiro duas vezes.

CAutoPtr também simplifica a criação de conjuntos de ponteiros. Em vez de derivar uma classe de coleção e substituindo o destruidor, é mais simples de fazer uma coleção de CAutoPtr objetos. Quando a coleção é excluída, a CAutoPtr os objetos serão sairá do escopo e excluir automaticamente os próprios.

CHeapPtr e variantes funcionam da maneira mesma sistema autônomo CAutoPtr, exceto pelo fato de que eles alocar e liberar memória usando diferentes de pilha funções em vez do C++ novo and Excluir operadores.CAutoVectorPtr é semelhante a CAutoPtr, a única diferença sendo que ele usa vetor [novo and vetor [excluir para alocar e liberar memória.

Consulte também CAutoPtrArray and CAutoPtrList quando arrays ou listas de apontadores inteligentes são necessárias.

Requisitos

Cabeçalho: atlbase.h

Exemplo

// 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;
}

Consulte também

Referência

Classe CHeapPtr

Classe CAutoVectorPtr

Outros recursos

CAutoPtr membros

Visão geral do ATL classe