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