Sdílet prostřednictvím


Třída CAutoPtr

Tato třída představuje objekt inteligentního ukazatele.

Důležité

Tuto třídu a její členy nelze použít v aplikacích, které se spouští v prostředí Windows Runtime.

Syntaxe

template <typename T>
class CAutoPtr

Parametry

T
Typ ukazatele.

Členové

Veřejné konstruktory

Název Popis
CAutoPtr::CAutoPtr Konstruktor
CAutoPtr::~CAutoPtr Destruktor.

Veřejné metody

Název Popis
CAutoPtr::Attach Voláním této metody převezmete vlastnictví existujícího ukazatele.
CAutoPtr::Detach Voláním této metody uvolníte vlastnictví ukazatele.
CAutoPtr::Free Voláním této metody odstraníte objekt, na který CAutoPtrodkazuje .

Veřejné operátory

Název Popis
CAutoPtr::operator T* Operátor přetypování.
CAutoPtr::operator = Operátor přiřazení.
CAutoPtr::operator -> Operátor pointer-to-member.

Veřejné datové členy

Název Popis
CAutoPtr::m_p Proměnná datového členu ukazatele.

Poznámky

Tato třída poskytuje metody pro vytváření a správu inteligentního ukazatele. Inteligentní ukazatele pomáhají chránit před nevrácenou pamětí tím, že automaticky uvolní prostředky, když vypadnou z rozsahu.

CAutoPtrDále konstruktor kopírování a operátor přiřazení přenesou vlastnictví ukazatele, zkopíruje zdrojový ukazatel na cílový ukazatel a nastaví zdrojový ukazatel na hodnotu NULL. Proto není možné mít dva CAutoPtr objekty, které ukládají stejný ukazatel, a snižuje možnost odstranění stejného ukazatele dvakrát.

CAutoPtr zjednodušuje také vytváření kolekcí ukazatelů. Místo odvození třídy kolekce a přepsání destruktoru je jednodušší vytvořit kolekci CAutoPtr objektů. Po odstranění CAutoPtr kolekce objekty přestanou mít obor a automaticky se odstraní.

CHeapPtr a varianty fungují stejným způsobem jako CAutoPtr, s tím rozdílem, že přidělují a uvolní paměť pomocí různých funkcí haldy místo C++ new a delete operátorů. CAutoVectorPtr je podobný CAutoPtr, jediný rozdíl je, že používá vektor new[] a vector delete[] k přidělení a uvolnění paměti.

Podívejte se také CAutoPtrArray na CAutoPtrList to, kdy jsou požadována pole nebo seznamy inteligentních ukazatelů.

Požadavky

Hlavička: 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;
}

CAutoPtr::Attach

Voláním této metody převezmete vlastnictví existujícího ukazatele.

void Attach(T* p) throw();

Parametry

p
Objekt CAutoPtr převezme vlastnictví tohoto ukazatele.

Poznámky

CAutoPtr Když objekt převezme vlastnictví ukazatele, automaticky odstraní ukazatel a všechna přidělená data, když přejde mimo rozsah. Pokud CAutoPtr::Detach je volána, programátor je opět zodpovědný za uvolnění všech přidělených prostředků.

V sestaveních ladění dojde k selhání kontrolního CAutoPtr::m_p výrazu, pokud datový člen aktuálně odkazuje na existující hodnotu. To znamená, že se nerovná hodnotě NULL.

Příklad

Podívejte se na příklad v přehleduCAutoPtr.

CAutoPtr::CAutoPtr

Konstruktor

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

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

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

Parametry

p
Existující ukazatel.

TSrc
Typ spravovaný jiným CAutoPtrobjektem, který slouží k inicializaci aktuálního objektu.

Poznámky

Objekt CAutoPtr lze vytvořit pomocí existujícího ukazatele, v takovém případě přenese vlastnictví ukazatele.

Příklad

Podívejte se na příklad v přehleduCAutoPtr.

CAutoPtr::~CAutoPtr

Destruktor.

~CAutoPtr() throw();

Poznámky

Uvolní všechny přidělené prostředky. Zavolá metodu CAutoPtr::Free.

CAutoPtr::Detach

Voláním této metody uvolníte vlastnictví ukazatele.

T* Detach() throw();

Vrácená hodnota

Vrátí kopii ukazatele.

Poznámky

Uvolní vlastnictví ukazatele, nastaví proměnnou datového CAutoPtr::m_p členu na hodnotu NULL a vrátí kopii ukazatele. Po volání Detachje na programátorovi, aby uvolnil všechny přidělené prostředky, nad kterými CAutoPtr objekt mohl dříve převzít zodpovědnost.

Příklad

Podívejte se na příklad v přehleduCAutoPtr.

CAutoPtr::Free

Voláním této metody odstraníte objekt, na který CAutoPtrodkazuje .

void Free() throw();

Poznámky

Objekt, na který odkazuje, CAutoPtr je uvolněn a proměnná datového členu CAutoPtr::m_p je nastavena na hodnotu NULL.

CAutoPtr::m_p

Proměnná datového členu ukazatele.

T* m_p;

Poznámky

Tato proměnná člena obsahuje informace o ukazateli.

CAutoPtr::operator =

Operátor přiřazení.

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

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

Parametry

p
Ukazatel.

TSrc
Typ třídy.

Vrácená hodnota

Vrátí odkaz na .CAutoPtr< T >

Poznámky

Operátor přiřazení odpojí CAutoPtr objekt od libovolného aktuálního ukazatele a připojí nový ukazatel na psvém místě.

Příklad

Podívejte se na příklad v přehleduCAutoPtr.

CAutoPtr::operator ->

Operátor pointer-to-member.

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

Vrácená hodnota

Vrátí hodnotu proměnné datového členu CAutoPtr::m_p .

Poznámky

Tento operátor slouží k volání metody ve třídě odkazované objektem CAutoPtr . V sestaveních ladění dojde k selhání kontrolního výrazu CAutoPtr , pokud odkazuje na hodnotu NULL.

Příklad

Podívejte se na příklad v přehleduCAutoPtr.

CAutoPtr::operator T*

Operátor přetypování.

operator T* () const throw();

Vrácená hodnota

Vrátí ukazatel na datový typ objektu definovaný v šabloně třídy.

Příklad

Podívejte se na příklad v přehleduCAutoPtr.

Viz také

Třída CHeapPtr
Třída CAutoVectorPtr
Přehled třídy