Partilhar via


Classe CAutoPtr

Essa classe representa um objeto de ponteiro inteligente.

Importante

Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.

Sintaxe

template <typename T>
class CAutoPtr

Parâmetros

T
O tipo de ponteiro.

Membros

Construtores públicos

Nome Descrição
CAutoPtr::CAutoPtr O construtor .
CAutoPtr::~CAutoPtr O destruidor.

Métodos públicos

Nome Descrição
CAutoPtr::Attach Chame esse método para assumir a propriedade de um ponteiro existente.
CAutoPtr::Detach Chame esse método para liberar a propriedade de um ponteiro.
CAutoPtr::Free Chame esse método para excluir um objeto apontado por um CAutoPtr.

Operadores públicos

Nome Descrição
CAutoPtr::operator T* O operador de conversão.
CAutoPtr::operator = O operador de atribuição.
CAutoPtr::operator -> O operador ponteiro para membro.

Membros de dados públicos

Nome Descrição
CAutoPtr::m_p A variável de membro de dados de ponteiro.

Comentários

Essa classe fornece métodos para criar e gerenciar um ponteiro inteligente. Ponteiros inteligentes ajudam a proteger contra perda de memória, liberando recursos automaticamente quando sai do escopo.

Além disso, o construtor de cópia e o operador de atribuição de CAutoPtr transferem a propriedade do ponteiro, copiando o ponteiro de origem para o ponteiro de destino e definindo o ponteiro de origem como NULL. É por isso que é impossível ter dois objetos CAutoPtr armazenando o mesmo ponteiro. Além disso, reduz a possibilidade de excluir o mesmo ponteiro duas vezes.

CAutoPtr também simplifica a criação de coleções dos ponteiros. Em vez de derivar uma classe de coleção e substituir o destruidor, é mais simples criar uma coleção dos objetos CAutoPtr. Quando a coleção for excluída, os objetos CAutoPtr sairão do escopo e se excluirão automaticamente.

CHeapPtr e variantes funcionam da mesma forma que CAutoPtr, exceto que alocam e liberam memória usando diferentes funções de heap, em vez dos operadores C++ new e delete. CAutoVectorPtr é semelhante a CAutoPtr, a única diferença é que usa vector new[] e vector delete[] para alocar e liberar memória.

Confira também CAutoPtrArray e CAutoPtrList quando forem necessárias matrizes ou listas de ponteiros inteligentes.

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

CAutoPtr::Attach

Chame esse método para assumir a propriedade de um ponteiro existente.

void Attach(T* p) throw();

Parâmetros

p
O objeto CAutoPtr assumirá a propriedade desse ponteiro.

Comentários

Quando um objeto CAutoPtr assume a propriedade de um ponteiro, ele exclui automaticamente o ponteiro e todos os dados alocados quando ele sai do escopo. Se CAutoPtr::Detach for chamado, o programador será novamente responsável por liberar todos os recursos alocados.

Em builds de depuração, ocorrerá uma falha de asserção se o membro de dados CAutoPtr::m_p apontar para um valor existente; ou seja, não for igual a NULL.

Exemplo

Confira o exemplo na Visão geral de CAutoPtr.

CAutoPtr::CAutoPtr

O construtor .

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

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

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

Parâmetros

p
Um ponteiro existente.

TSrc
O tipo que está sendo gerenciado por outro CAutoPtr, usado para inicializar o objeto atual.

Comentários

O objeto CAutoPtr pode ser criado usando um ponteiro existente. Nesse caso, ele transfere a propriedade do ponteiro.

Exemplo

Confira o exemplo na Visão geral de CAutoPtr.

CAutoPtr::~CAutoPtr

O destruidor.

~CAutoPtr() throw();

Comentários

Libera todos os recursos alocados. Chama CAutoPtr::Free.

CAutoPtr::Detach

Chame esse método para liberar a propriedade de um ponteiro.

T* Detach() throw();

Valor retornado

Retorna uma cópia do ponteiro.

Comentários

Libera a propriedade de um ponteiro, define a variável de membro de dado CAutoPtr::m_p e retorna uma cópia do ponteiro. Depois de chamar Detach, cabe ao programador liberar todos os recursos alocados sobre os quais o objeto CAutoPtr pode ter assumido anteriormente a responsabilidade.

Exemplo

Confira o exemplo na Visão geral de CAutoPtr.

CAutoPtr::Free

Chame esse método para excluir um objeto apontado por um CAutoPtr.

void Free() throw();

Comentários

O objeto apontado pelo CAutoPtr é liberado e a variável de membro de dados CAutoPtr::m_p é definida como NULL.

CAutoPtr::m_p

A variável de membro de dados de ponteiro.

T* m_p;

Comentários

Essa variável de membro contém as informações do ponteiro.

CAutoPtr::operator =

O operador de atribuição.

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

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

Parâmetros

p
Um ponteiro.

TSrc
Um tipo de classe.

Valor retornado

Retorna uma referência a um CAutoPtr< T >.

Comentários

O operador de atribuição desanexa o objeto CAutoPtr de qualquer ponteiro atual e anexa o novo ponteiro, p, em seu lugar.

Exemplo

Confira o exemplo na Visão geral de CAutoPtr.

CAutoPtr::operator ->

O operador ponteiro para membro.

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

Valor retornado

Retorna o valor da variável de membro de dados CAutoPtr::m_p.

Comentários

Use esse operador para chamar um método em uma classe apontada pelo objeto CAutoPtr. Em builds de depuração, ocorrerá uma falha de asserção se o CAutoPtr apontar para NULL.

Exemplo

Confira o exemplo na Visão geral de CAutoPtr.

CAutoPtr::operator T*

O operador de conversão.

operator T* () const throw();

Valor retornado

Retorna um ponteiro para o tipo de dados de objeto definido no modelo de classe.

Exemplo

Confira o exemplo na Visão geral de CAutoPtr.

Confira também

CHeapPtr classe
CAutoVectorPtr classe
Visão geral de classe