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ý CAutoPtr odkazuje . |
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.
CAutoPtr
Dá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 CAutoPtr
objektem, 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í Detach
je 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ý CAutoPtr
odkazuje .
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 p
své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
.