Udostępnij za pośrednictwem


Klasa CAutoPtr

Ta klasa reprezentuje inteligentny obiekt wskaźnika.

Ważne

Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.

Składnia

template <typename T>
class CAutoPtr

Parametry

T
Typ wskaźnika.

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CAutoPtr::CAutoPtr Konstruktor.
CAutoPtr::~CAutoPtr Destruktora.

Metody publiczne

Nazwa/nazwisko opis
CAutoPtr::Attach Wywołaj tę metodę, aby przejąć własność istniejącego wskaźnika.
CAutoPtr::Detach Wywołaj tę metodę, aby zwolnić własność wskaźnika.
CAutoPtr::Free Wywołaj tę metodę, aby usunąć obiekt wskazywany przez CAutoPtrobiekt .

Operatory publiczne

Nazwa/nazwisko opis
CAutoPtr::operator T* Operator rzutowania.
CAutoPtr::operator = Operator przypisania.
CAutoPtr::operator -> Operator wskaźnika do elementu członkowskiego.

Elementy członkowskie danych publicznych

Nazwa/nazwisko opis
CAutoPtr::m_p Zmienna składowa danych wskaźnika.

Uwagi

Ta klasa udostępnia metody tworzenia inteligentnego wskaźnika i zarządzania nim. Inteligentne wskaźniki pomagają chronić przed wyciekami pamięci przez automatyczne zwalnianie zasobów, gdy wykracza poza zakres.

CAutoPtrPonadto konstruktor kopiujący i operator przypisania przenoszą własność wskaźnika, kopiując wskaźnik źródłowy do wskaźnika docelowego i ustawiając wskaźnik źródłowy na wartość NULL. Dlatego nie można mieć dwóch CAutoPtr obiektów przechowujących ten sam wskaźnik i zmniejsza możliwość dwukrotnego usunięcia tego samego wskaźnika.

CAutoPtr Upraszcza również tworzenie kolekcji wskaźników. Zamiast wyprowadzać klasę kolekcji i zastępować destruktor, łatwiej jest utworzyć kolekcję CAutoPtr obiektów. Po usunięciu CAutoPtr kolekcji obiekty wyjdą poza zakres i automatycznie zostaną usunięte.

CHeapPtr warianty działają w taki sam sposób jak CAutoPtr, z tą różnicą, że przydzielają i zwalniają pamięć przy użyciu różnych funkcji stertowania zamiast języka C++ new i delete operatorów. CAutoVectorPtr jest podobna do CAutoPtr, jedyną różnicą jest użycie wektora new[] i wektor delete[] do przydzielenia i zwolnienia pamięci.

Zobacz również CAutoPtrArray , CAutoPtrList kiedy są wymagane tablice lub listy inteligentnych wskaźników.

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;
}

CAutoPtr::Attach

Wywołaj tę metodę, aby przejąć własność istniejącego wskaźnika.

void Attach(T* p) throw();

Parametry

p
Obiekt CAutoPtr przejmie na własność ten wskaźnik.

Uwagi

CAutoPtr Gdy obiekt przejmuje własność wskaźnika, automatycznie usunie wskaźnik i wszystkie przydzielone dane, gdy wyjdą poza zakres. Jeśli CAutoPtr::Detach zostanie wywołana, programista ponownie ponosi odpowiedzialność za zwalnianie przydzielonych zasobów.

W kompilacjach debugowania wystąpi błąd asercji, jeśli CAutoPtr::m_p element członkowski danych wskazuje obecnie istniejącą wartość, czyli nie jest równa null.

Przykład

Zobacz przykład w sekcji CAutoPtr Przegląd.

CAutoPtr::CAutoPtr

Konstruktor.

CAutoPtr() throw();
explicit CAutoPtr(T* p) throw();

template<typename TSrc>
CAutoPtr(CAutoPtr<TSrc>& p) throw();

template<>
CAutoPtr(CAutoPtr<T>& p) throw();

Parametry

p
Istniejący wskaźnik.

TSrc
Typ zarządzany przez inny CAutoPtrobiekt , używany do inicjowania bieżącego obiektu.

Uwagi

Obiekt CAutoPtr można utworzyć przy użyciu istniejącego wskaźnika, w tym przypadku przenosi własność wskaźnika.

Przykład

Zobacz przykład w przeglądzieCAutoPtr.

CAutoPtr::~CAutoPtr

Destruktora.

~CAutoPtr() throw();

Uwagi

Zwalnia wszystkie przydzielone zasoby. Wywołuje CAutoPtr::Free.

CAutoPtr::Detach

Wywołaj tę metodę, aby zwolnić własność wskaźnika.

T* Detach() throw();

Wartość zwracana

Zwraca kopię wskaźnika.

Uwagi

Zwalnia własność wskaźnika, ustawia CAutoPtr::m_p zmienną składową danych na wartość NULL i zwraca kopię wskaźnika. Po wywołaniu Detachmetody do programisty należy zwolnić wszystkie przydzielone zasoby, nad którymi CAutoPtr obiekt mógł wcześniej objąć odpowiedzialność.

Przykład

Zobacz przykład w przeglądzieCAutoPtr.

CAutoPtr::Free

Wywołaj tę metodę, aby usunąć obiekt wskazywany przez CAutoPtrobiekt .

void Free() throw();

Uwagi

Obiekt wskazywany przez CAutoPtr obiekt jest zwalniany, a zmienna CAutoPtr::m_p składowa danych jest ustawiona na wartość NULL.

CAutoPtr::m_p

Zmienna składowa danych wskaźnika.

T* m_p;

Uwagi

Ta zmienna składowa przechowuje informacje o wskaźniku.

CAutoPtr::operator =

Operator przypisania.

template<>
CAutoPtr<T>& operator= (CAutoPtr<T>& p);

template<typename TSrc>
CAutoPtr<T>& operator= (CAutoPtr<TSrc>& p);

Parametry

p
Wskaźnik.

TSrc
Typ klasy.

Wartość zwracana

Zwraca odwołanie do .CAutoPtr< T >

Uwagi

Operator przypisania odłącza CAutoPtr obiekt od dowolnego bieżącego wskaźnika i dołącza nowy wskaźnik , pw swoim miejscu.

Przykład

Zobacz przykład w przeglądzieCAutoPtr.

CAutoPtr::operator ->

Operator wskaźnika do elementu członkowskiego.

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

Wartość zwracana

Zwraca wartość zmiennej składowej CAutoPtr::m_p danych.

Uwagi

Użyj tego operatora, aby wywołać metodę w klasie wskazywanej CAutoPtr przez obiekt. W kompilacjach debugowania wystąpi błąd asercji, jeśli CAutoPtr wskazuje wartość NULL.

Przykład

Zobacz przykład w sekcji CAutoPtr Przegląd.

CAutoPtr::operator T*

Operator rzutowania.

operator T* () const throw();

Wartość zwracana

Zwraca wskaźnik do typu danych obiektu zdefiniowanego w szablonie klasy.

Przykład

Zobacz przykład w przeglądzieCAutoPtr.

Zobacz też

Klasa CHeapPtr
Klasa CAutoVectorPtr
Omówienie klasy