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
.