Klasa CAutoPtr
Ta klasa reprezentuje obiekt inteligentny wskaźnika.
![]() |
---|
W aplikacjach, które są wykonywane w Windows Runtime nie można użyć tej klasy i jej członków. |
template<
typename T
>
class CAutoPtr
Parametry
- T
Typ wskaźnika.
Członkowie
Publiczne konstruktory
Nazwa |
Opis |
---|---|
Konstruktor. |
|
Destruktor. |
Metody publiczne
Nazwa |
Opis |
---|---|
Wywołanie tej metody, aby przejąć na własność istniejącego wskaźnika. |
|
Wywołanie tej metody, aby zwolnić własności wskaźnika. |
|
Wywołanie tej metody, aby usunąć obiekt wskazywanej przez CAutoPtr. |
Podmioty publiczne
Nazwa |
Opis |
---|---|
Operator rzutowania. |
|
Operator przypisania. |
|
Operator wskaźnik do Państwa. |
Publiczne danych członków
Nazwa |
Opis |
---|---|
Wskaźnik zmienna członka danych. |
Uwagi
Ta klasa zapewnia metody tworzenia i zarządzania smart pointer pomoże chronić przed przecieki pamięci przez automatyczne zwalnianie zasobów, gdy znajdzie się ona poza zakresem.
Dalsze, CAutoPtrKonstruktor kopiujący i przypisanie operator przeniesienia własności wskaźnika, kopiowanie wskaźnika źródła wskaźnik przeznaczenia i ustawienie wskaźnika źródła na NULL.Jest zatem niemożliwe dwa CAutoPtr każdego ten sam wskaźnik przechowywanie obiektów i zmniejsza to możliwość usuwania samego wskaźnik dwa razy.
CAutoPtrupraszcza tworzenie kolekcji wskaźników.Wynikające z klasy kolekcji i przesłanianie destruktor, jest prostsze Kolekcja CAutoPtr obiektów.Po usunięciu kolekcji CAutoPtr obiekty będą wykracza poza zakres i automatycznie usuwać same.
CHeapPtr i warianty pracować w taki sam sposób jak CAutoPtr, z wyjątkiem, że przydzielić i zwolnić pamięć sterty różnych funkcji zamiast C++ Nowy i usunąć operatorów.CAutoVectorPtr jest podobny do CAutoPtr, jedyną różnicą jest, że używa [] nowe vector i vector usunąć [ przydzielić i zwolnić pamięć.
Zobacz też CAutoPtrArray i CAutoPtrList gdy wymagane są tablicami lub list inteligentne kursory.
Wymagania
Nagłówek: atlbase.h
Przykład
// 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;
}