Třída CAutoPtr
Tato třída představuje ukazatel inteligentní objekt.
Důležité |
---|
Třídy a jejích členů nelze použít v aplikacích, které spustit v modulu Runtime v systému Windows. |
template<
typename T
>
class CAutoPtr
Parametry
- T
Typ ukazatele.
Členy
Veřejné konstruktory
Název |
Description |
---|---|
Konstruktor. |
|
Destruktoru. |
Veřejné metody
Název |
Description |
---|---|
Volání této metody převzít vlastnictví stávající ukazatel. |
|
Volání této metody uvolnění vlastnictví ukazatele. |
|
Volání této metody odstranit objekt odkazuje CAutoPtr . |
Veřejné operátory
Název |
Description |
---|---|
Operátor přetypování. |
|
Operátor přiřazení. |
|
Operátor ukazatele na člen. |
Veřejné datové členy
Název |
Description |
---|---|
Ukazatel data členské proměnné. |
Poznámky
Tato třída poskytuje metody pro vytváření a správu inteligentní ukazatel, který pomůže chránit proti nevracení paměti automaticky uvolnit prostředky při spadá mimo rozsah.
Dále, CAutoPtr Kopírovat konstruktor a přiřazení operátor převést vlastnictví ukazatele, kopírování ukazatelem zdroje na cílový ukazatel a nastavení ukazatelem zdroje na hodnotu NULL.Je možné mít dva CAutoPtr každý stejný ukazatel ukládání objektů a tím snížíte možnost odstranění dvakrát stejný ukazatel.
CAutoPtrtaké zjednodušuje vytváření kolekce ukazatele.Kolekce třídy odvozené a potlačení se objekt, je jednodušší vytvořit kolekci CAutoPtr objektů.Při odstranění kolekce CAutoPtr objektů se dostanou mimo rozsah a automaticky odstranit sami.
CHeapPtr a varianty pracovat stejným způsobem jako CAutoPtr , s výjimkou, že přidělit a uvolnit paměť pomocí funkce různých haldy místo C++ nové a Odstranit operátory.CAutoVectorPtr je podobný CAutoPtr , přičemž jediným rozdílem je, že používá vector nové [ a vector odstranit [ přidělení a uvolnění paměti.
Viz také CAutoPtrArray a CAutoPtrList při polí nebo seznamů inteligentní ukazatele jsou nutné.
Požadavky
Záhlaví: atlbase.h
Příklad
// 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;
}