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 CAutoPtr obiekt . |
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.
CAutoPtr
Ponadto 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 CAutoPtr
obiekt , 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 Detach
metody 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 CAutoPtr
obiekt .
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 , p
w 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