Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.