CAutoPtr-Klasse
Diese Klasse stellt ein Objekt des intelligenten Zeigermechanismus dar.
Wichtig |
---|
Diese Klasse und ihre Member können in Anwendungen nicht verwendet werden, die in der Windows Runtime ausführen. |
template<
typename T
>
class CAutoPtr
Parameter
- T
Der Zeigertyp.
Mitglieder
Öffentliche Konstruktoren
Name |
Description |
---|---|
Der -Konstruktor. |
|
Der Destruktor. |
Öffentliche Methoden
Name |
Description |
---|---|
Rufen Sie diese Methode auf, um den Besitz einer vorhandenen Zeiger zu akzeptieren. |
|
Rufen Sie diese Methode auf, um den Besitz eines Zeigers freizugeben. |
|
Rufen Sie diese Methode auf, um ein Objekt zu löschen, das von zu CAutoPtr gezeigt wird. |
Öffentliche Operatoren
Name |
Description |
---|---|
Der Umwandlungsoperator. |
|
Der Zuweisungsoperator. |
|
Der Operator Zeiger-auf-Member. |
Öffentliche Datenmember
Name |
Description |
---|---|
Die Zeigerdatenmembervariable. |
Hinweise
Diese Klasse stellt Methoden zum Erstellen und Verwalten eines intelligenten Zeigermechanismus bereit, der wird verhindert, dass Speicherverluste schützen, indem automatisch Ressourcen freigibt, wenn er außerhalb des gültigen Bereichs liegt.
Darüber hinaus übertragen der Kopierkonstruktor und Zuweisungsoperator von CAutoPtr den Besitz des Zeigers, kopieren den Quellzeiger zum Zielzeiger und legen den Quellzeiger auf NULL fest.Es ist daher nicht möglich, zwei CAutoPtr-Objekte jedes zu verfügen, die den gleichen Zeiger speichert, und dieses reduziert die Möglichkeit von den gleichen Zeiger zweimal löschen.
CAutoPtr vereinfacht auch die Erstellung von Auflistungen Zeiger.Anstatt, eine Auflistungsklasse berechnen und den Destruktor zu überschreiben, ist es einfacher, eine Auflistung von Objekten CAutoPtr auszuführen.Wenn die Auflistung gelöscht wird, CAutoPtr verlassen die Objekte im Bereich löschen und sich automatisch.
CHeapPtr und Varianten funktionieren auf die gleiche Weise wie CAutoPtr, außer dass sie belegen und geben Arbeitsspeicher mit verschiedenen Heapfunktionen statt C++ new und delete-Operatoren frei.CAutoVectorPtr ist zu CAutoPtr, der ähnlich, der einzige Unterschied ist, dass es vector new[] und vector delete[] verwendet, um Arbeitsspeicher reserviert und freigegeben.
Siehe auch CAutoPtrArray und CAutoPtrList, wenn Arrays oder Listen von intelligenten Zeiger 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;
}