CAutoPtr-Klasse

Diese Klasse stellt ein intelligentes Zeigerobjekt dar.

Wichtig

Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows Runtime ausgeführt werden.

Syntax

template <typename T>
class CAutoPtr

Parameter

T
Der Zeigertyp.

Member

Öffentliche Konstruktoren

name BESCHREIBUNG
CAutoPtr::CAutoPtr Der Konstruktor.
CAutoPtr::~CAutoPtr Der Destruktor.

Öffentliche Methoden

name BESCHREIBUNG
CAutoPtr::Attach Rufen Sie diese Methode auf, um den Besitz eines vorhandenen Zeigers zu übernehmen.
CAutoPtr::D etach Rufen Sie diese Methode auf, um den Besitz eines Zeigers freizugeben.
CAutoPtr::Free Rufen Sie diese Methode auf, um ein Objekt zu löschen, auf das ein CAutoPtr zeigt.

Öffentliche Operatoren

Name BESCHREIBUNG
CAutoPtr::operator T* Der Umwandlungsoperator.
CAutoPtr::operator = Der Zuweisungsoperator.
CAutoPtr::operator -> Der Zeiger-zu-Member-Operator.

Öffentliche Datenmember

Name BESCHREIBUNG
CAutoPtr::m_p Die Zeigerdatenmembervariable.

Hinweise

Diese Klasse stellt Methoden zum Erstellen und Verwalten eines intelligenten Zeigers bereit, die zum Schutz vor Speicherverlusten beitragen, indem Ressourcen automatisch freigegeben werden, wenn sie aus dem Gültigkeitsbereich fallen.

Darüber hinaus CAutoPtr übertragen der Kopierkonstruktor und der Zuweisungsoperator den Besitz des Zeigers, kopieren den Quellzeiger auf den Zielzeiger und legen den Quellzeiger auf NULL fest. Es ist daher nicht möglich, zwei Objekte zu CAutoPtr verwenden, die jeweils denselben Zeiger speichern. Dies reduziert die Möglichkeit, denselben Zeiger zweimal zu löschen.

CAutoPtr vereinfacht auch die Erstellung von Auflistungen von Zeigern. Anstatt eine Auflistungsklasse abzuleiten und den Destruktor zu überschreiben, ist es einfacher, eine Auflistung von -Objekten zu CAutoPtr erstellen. Wenn die Sammlung gelöscht wird, werden die CAutoPtr Objekte aus dem Gültigkeitsbereich entfernt und automatisch selbst gelöscht.

CHeapPtr und Varianten funktionieren auf die gleiche Weise wie CAutoPtr , mit der Ausnahme, dass sie Arbeitsspeicher mithilfe verschiedener Heapfunktionen anstelle von C++ und Operatoren zuordnen new und delete freigeben. CAutoVectorPtr ähnelt CAutoPtr . Der einzige Unterschied besteht darin, dass der Vektor new[] und vector delete[] zum Zuordnen und Freigeben von Arbeitsspeicher verwendet werden.

Siehe auch CAutoPtrArray und CAutoPtrList, wenn Arrays oder Listen mit intelligenten Zeigern erforderlich sind.

Anforderungen

Header: atlbase.h

Beispiel

// 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

Rufen Sie diese Methode auf, um den Besitz eines vorhandenen Zeigers zu übernehmen.

void Attach(T* p) throw();

Parameter

p
Das CAutoPtr -Objekt übernimmt den Besitz dieses Zeigers.

Hinweise

Wenn ein CAutoPtr -Objekt den Besitz eines Zeigers übernimmt, löscht es automatisch den Zeiger und alle zugeordneten Daten, wenn es den Gültigkeitsbereich übergibt. Wenn CAutoPtr::D etach aufgerufen wird, erhält der Programmierer erneut die Verantwortung für das Freigeben zugeordneter Ressourcen.

In Debugbuilds tritt ein Assertionsfehler auf, wenn der CAutoPtr::m_p Datenmember derzeit auf einen vorhandenen Wert verweist. das heißt, es ist nicht gleich NULL.

Beispiel

Sehen Sie sich das Beispiel in der CAutoPtr-Übersicht an.

CAutoPtr::CAutoPtr

Der Konstruktor.

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

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

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

Parameter

p
Ein vorhandener Zeiger.

TSrc
Der Typ, der von einem anderen verwaltet wird CAutoPtr und zum Initialisieren des aktuellen -Objekts verwendet wird.

Hinweise

Das CAutoPtr Objekt kann mithilfe eines vorhandenen Zeigers erstellt werden. In diesem Fall überträgt es den Besitz des Zeigers.

Beispiel

Sehen Sie sich das Beispiel in der CAutoPtr-Übersicht an.

CAutoPtr::~CAutoPtr

Der Destruktor.

~CAutoPtr() throw();

Hinweise

Gibt alle zugeordneten Ressourcen frei. Ruft CAutoPtr::Freeauf.

CAutoPtr::D etach

Rufen Sie diese Methode auf, um den Besitz eines Zeigers freizugeben.

T* Detach() throw();

Rückgabewert

Gibt eine Kopie des Zeigers zurück.

Hinweise

Gibt den Besitz eines Zeigers frei, legt die Datenmembervariable CAutoPtr::m_p auf NULL fest und gibt eine Kopie des Zeigers zurück. Nach dem Aufruf von Detach ist es Aufgabe des Programmierers, alle zugeordneten Ressourcen frei zu machen, für die das Objekt zuvor möglicherweise CAutoPtr wiederverwendet wurde.

Beispiel

Sehen Sie sich das Beispiel in der CAutoPtr-Übersicht an.

CAutoPtr::Free

Rufen Sie diese Methode auf, um ein Objekt zu löschen, auf das ein CAutoPtr zeigt.

void Free() throw();

Hinweise

Das Objekt, auf das von gezeigt CAutoPtr wird, wird freigegeben, und die Datenmembervariable CAutoPtr::m_p wird auf NULL festgelegt.

CAutoPtr::m_p

Die Zeigerdatenmembervariable.

T* m_p;

Hinweise

Diese Membervariable enthält die Zeigerinformationen.

CAutoPtr::operator =

Der Zuweisungsoperator.

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

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

Parameter

p
Ein Zeiger.

TSrc
Ein Klassentyp.

Rückgabewert

Gibt einen Verweis auf eine CAutoPtr-Klasse zurück. < T >

Hinweise

Der Zuweisungsoperator trennt das Objekt von jedem aktuellen Zeiger und hängt den neuen Zeiger CAutoPtr p an seine Stelle an.

Beispiel

Sehen Sie sich das Beispiel in der Übersicht über CAutoPtr an.

CAutoPtr::operator :>

Der Zeiger-zu-Member-Operator.

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

Rückgabewert

Gibt den Wert der Daten membervariablen CAutoPtr::m_p zurück.

Hinweise

Verwenden Sie diesen Operator zum Aufrufen einer Methode in einer Klasse, auf die das -Objekt CAutoPtr zeigt. In Debugbuilds tritt ein Assertionsfehler auf, wenn CAutoPtr auf NULL zeigt.

Beispiel

Sehen Sie sich das Beispiel in der Übersicht über CAutoPtr an.

CAutoPtr::operator T*

Der Cast-Operator.

operator T* () const throw();

Rückgabewert

Gibt einen Zeiger auf den in der Klassenvorlage definierten Objektdatentyp zurück.

Beispiel

Sehen Sie sich das Beispiel in der Übersicht über CAutoPtr an.

Siehe auch

CHeapPtr-Klasse
CAutoVectorPtr-Klasse
Klassenübersicht