Freigeben über


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::Detach Rufen Sie diese Methode auf, um den Besitz eines Zeigers freizugeben.
CAutoPtr::Free Rufen Sie diese Methode auf, um ein Objekt zu löschen, das von einem CAutoPtr.

Öffentliche Operatoren

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

Öffentliche Datenmmber

Name Beschreibung
CAutoPtr::m_p Die Membervariable für Zeigerdaten.

Hinweise

Diese Klasse bietet Methoden zum Erstellen und Verwalten eines intelligenten Zeigers. Intelligente Zeiger tragen zum Schutz vor Speicherlecks bei, indem Ressourcen automatisch freigegeben werden, wenn sie nicht in den Umfang fallen.

CAutoPtrDarüber hinaus übertragen "s copy constructor and assignment operator transfer ownership of the pointer, copy the source pointer to the destination pointer and setting the source pointer to NULL. Aus diesem Grund ist es unmöglich, zwei CAutoPtr Objekte zu haben, die jeweils denselben Zeiger speichern, und es 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 außer Kraft zu setzen, ist es einfacher, eine Auflistung von CAutoPtr Objekten zu erstellen. Wenn die Auflistung gelöscht wird, gehen die CAutoPtr Objekte außerhalb des Gültigkeitsbereichs und löschen sich automatisch.

CHeapPtr und Varianten funktionieren auf die gleiche Weise wie CAutoPtr, mit der Ausnahme, dass sie Speicher mithilfe verschiedener Heap-Funktionen anstelle von C++ new und Operatoren zuordnen und delete freigeben. CAutoVectorPtrCAutoPträhnelt dem einzigen Unterschied darin, dass Vektor new[] und Vector Delete[] verwendet werden, um Arbeitsspeicher zuzuweisen und freizugeben.

Siehe auch CAutoPtrArray und CAutoPtrList wann Arrays oder Listen intelligenter Zeiger erforderlich sind.

Anforderungen

Kopfzeile: 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 außerhalb des Gültigkeitsbereichs ist. Wenn CAutoPtr::Detach aufgerufen wird, wird der Programmierer erneut dafür verantwortlich sein, alle zugeordneten Ressourcen freizugeben.

In Debugbuilds tritt ein Assertionsfehler auf, wenn der CAutoPtr::m_p Datenmemm aktuell 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 CAutoPtrverwaltet wird, wird zum Initialisieren des aktuellen Objekts verwendet.

Hinweise

Das CAutoPtr Objekt kann mit einem vorhandenen Zeiger erstellt werden, in diesem Fall überträgt es den Besitz des Zeigers.

Beispiel

Sehen Sie sich das Beispiel in der Übersicht anCAutoPtr.

CAutoPtr::~CAutoPtr

Der Destruktor.

~CAutoPtr() throw();

Hinweise

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

CAutoPtr::Detach

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 CAutoPtr::m_p Datenelementvariable auf NULL fest und gibt eine Kopie des Zeigers zurück. Nach dem Aufruf Detachist es bis zum Programmierer, alle zugeordneten Ressourcen freizugeben, über die das CAutoPtr Objekt zuvor die Verantwortung übernommen haben kann.

Beispiel

Sehen Sie sich das Beispiel in der Übersicht anCAutoPtr.

CAutoPtr::Free

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

void Free() throw();

Hinweise

Das Objekt, auf das durch die CAutoPtr Zeichenfolge verwiesen wird, wird freigegeben, und die CAutoPtr::m_p Datenmemmemmvariable wird auf NULL festgelegt.

CAutoPtr::m_p

Die Membervariable für Zeigerdaten.

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 ein CAutoPtr< T >.

Hinweise

Der Zuordnungsoperator trennt das CAutoPtr Objekt von einem beliebigen aktuellen Zeiger und fügt den neuen Zeiger an pseiner Stelle an.

Beispiel

Sehen Sie sich das Beispiel in der Übersicht anCAutoPtr.

CAutoPtr::operator ->

Der Zeiger-zu-Member-Operator.

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

Rückgabewert

Gibt den Wert der CAutoPtr::m_p Datenmemembevariable zurück.

Hinweise

Verwenden Sie diesen Operator, um eine Methode in einer Klasse aufzurufen, auf die das CAutoPtr Objekt verweist. In Debugbuilds tritt ein Assertionsfehler auf, wenn der CAutoPtr Wert auf NULL verweist.

Beispiel

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

CAutoPtr::operator T*

Der Umwandlungsoperator.

operator T* () const throw();

Rückgabewert

Gibt einen Zeiger auf den objektdatentyp zurück, der in der Klassenvorlage definiert ist.

Beispiel

Sehen Sie sich das Beispiel in der Übersicht anCAutoPtr.

Siehe auch

CHeapPtr-Klasse
CAutoVectorPtr-Klasse
Klassenübersicht