Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A Active Template Library (ATL) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
Esta classe representa um objeto ponteiro inteligente.
Importante
Esta classe e os seus membros não podem ser usados em aplicações que sejam executadas no Windows Runtime.
Sintaxe
template <typename T>
class CAutoPtr
Parâmetros
T
Do tipo apontador.
Membros
Construtores públicos
| Nome | Description |
|---|---|
CAutoPtr::CAutoPtr |
O construtor. |
CAutoPtr::~CAutoPtr |
O destruidor. |
Métodos públicos
| Nome | Description |
|---|---|
CAutoPtr::Attach |
Chame este método para assumir a posse de um ponteiro existente. |
CAutoPtr::Detach |
Chame este método para libertar a propriedade de um apontador. |
CAutoPtr::Free |
Chame este método para eliminar um objeto apontado por um CAutoPtr. |
Operadores públicos
| Nome | Description |
|---|---|
CAutoPtr::operator T* |
O operador do elenco. |
CAutoPtr::operator = |
O operador de atribuição. |
CAutoPtr::operator -> |
O operador apontador para membro. |
Membros de dados públicos
| Nome | Description |
|---|---|
CAutoPtr::m_p |
A variável membro dos dados do apontador. |
Observações
Esta aula fornece métodos para criar e gerir um ponteiro inteligente. Os apontadores inteligentes ajudam a proteger contra fugas de memória ao libertar automaticamente recursos quando estes saem do âmbito.
Além disso, CAutoPtro construtor de cópia e o operador de atribuição transferem a propriedade do ponteiro, copiando o ponteiro fonte para o ponteiro de destino e definindo o ponteiro fonte como NULL. É por isso que é impossível ter dois CAutoPtr objetos a armazenar o mesmo ponteiro cada um, e isso reduz a possibilidade de apagar o mesmo ponteiro duas vezes.
CAutoPtr Também simplifica a criação de coleções de ponteiros. Em vez de derivar uma classe de coleção e sobrescrever o destruidor, é mais simples criar uma coleção de CAutoPtr objetos. Quando a coleção é eliminada, os CAutoPtr objetos saem do âmbito e eliminam-se automaticamente.
CHeapPtre as variantes funcionam da mesma forma que CAutoPtr, exceto que alocam e libertam memória usando funções heap diferentes em vez dos operadores C++ deletenew e operadores.
CAutoVectorPtr é semelhante a CAutoPtr, sendo a única diferença que utiliza vector new[] e vector delete[] para alocar e libertar memória.
Veja também CAutoPtrArray e CAutoPtrList quando são necessários arrays ou listas de apontadores inteligentes.
Requerimentos
Cabeçalho: atlbase.h
Example
// 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 este método para assumir a posse de um ponteiro existente.
void Attach(T* p) throw();
Parâmetros
p
O CAutoPtr objeto assumirá a posse deste ponteiro.
Observações
Quando um CAutoPtr objeto assume posse de um apontador, ele apaga automaticamente o ponteiro e quaisquer dados alocados quando este sai do âmbito. Se CAutoPtr::Detach for chamado, o programador recebe novamente a responsabilidade de libertar quaisquer recursos alocados.
Em builds de depuração, ocorrerá uma falha de asserção se o CAutoPtr::m_p membro de dados apontar para um valor existente; ou seja, não for igual a NULL.
Example
Veja o exemplo na CAutoPtr Visão Geral.
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 já existente.
TSrc
O tipo gerido por outro CAutoPtr, usado para inicializar o objeto atual.
Observações
O CAutoPtr objeto pode ser criado usando um ponteiro existente, caso em que transfere a propriedade do ponteiro.
Example
Veja o exemplo na CAutoPtr visão geral.
CAutoPtr::~CAutoPtr
O destruidor.
~CAutoPtr() throw();
Observações
Liberta quaisquer recursos alocados. Chamadas CAutoPtr::Free.
CAutoPtr::Detach
Chame este método para libertar a propriedade de um apontador.
T* Detach() throw();
Valor de retorno
Devolve uma cópia do ponteiro.
Observações
Liberta a propriedade de um ponteiro, define a CAutoPtr::m_p variável membro de dados para NULL e devolve uma cópia do ponteiro. Depois de chamar Detach, cabe ao programador libertar quaisquer recursos alocados sobre os quais o CAutoPtr objeto possa ter assumido responsabilidade anteriormente.
Example
Veja o exemplo na CAutoPtr visão geral.
CAutoPtr::Free
Chame este método para eliminar um objeto apontado por um CAutoPtr.
void Free() throw();
Observações
O objeto apontado pelo CAutoPtr é libertado, e a CAutoPtr::m_p variável membro de dados é definida como NULL.
CAutoPtr::m_p
A variável membro dos dados do apontador.
T* m_p;
Observações
Esta variável membro contém a informação do apontador.
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 de retorno
Devolve uma referência a um CAutoPtr< T >.
Observações
O operador de atribuição desliga o CAutoPtr objeto de qualquer ponteiro atual e anexa o novo apontador, p, no seu lugar.
Example
Veja o exemplo na CAutoPtr visão geral.
CAutoPtr::operator ->
O operador apontador para membro.
T* operator->() const throw();
Valor de retorno
Devolve o valor da CAutoPtr::m_p variável membro de dados.
Observações
Use este operador para chamar um método numa classe apontada pelo CAutoPtr objeto. Em builds de depuração, ocorrerá uma falha de asserção se a CAutoPtr apontar para NULL.
Example
Veja o exemplo na CAutoPtr Visão Geral.
CAutoPtr::operator T*
O operador do elenco.
operator T* () const throw();
Valor de retorno
Devolve um ponteiro para o tipo de dado de objeto definido no template de classe.
Example
Veja o exemplo na CAutoPtr visão geral.