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.
CAutoPtr
Darü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. CAutoVectorPtr
CAutoPtr
ä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 CAutoPtr
verwaltet 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 Detach
ist 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 p
seiner 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
.