Inteligentne wskaźniki to bardzo użyteczne stworzenia. Inteligentny wskaźnik jest klasą utworzoną z szablonu, która automatycznie dba o usuwanie pamięci. Gdy klasa traci zasięg, wówczas jest usuwana również przydzielona pamięć. Już nigdy więcej niekontrolowanych strat pamięci.
Inteligentne wskaźniki opierają się na bardzo łatwym pomyśle. Tworzymy klasy inteligentnych wskaźników na bazie szablonu, dzięki czemu można utworzyć wskaźniki do dowolnego typu.
Deklaracja inteligentnego wskaźnika przebiega w ten sam sposób, co deklaracja zwykłego wskaźnika. Tylko zamiast kodu:
int *pi;
piszemy kod:
BaseSmartPointer<int> pi;
W przeciwieństwie do zwykłego wskaźnika, inteligentny wskaźnik jest obiektem. Gdy zatem zmienna lokalna wychodzi poza zasięg, wówczas jest wywoływany destruktor klasy. Destruktor inteligentnego wskaźnika oczyszcza wskazywaną pamięć, jak widać w podanym kodzie.
virtual ~BaseSmartPointer()
if(m_pt)
delete m_pt; m_pt=NULL;
Utworzyliśmy dwie klasy inteligentnych wskaźników. Pierwsza klasa, BaseSmart-Pointer, jest przeznaczona dla typów wbudowanych takich jak int, float itp. Nie obsługuje ona operatora dostępu (->). Druga klasa, ObjectSmartPointer, jest pochodną klasy BaseSmartPointer i już zawiera operator dostępu (->).
Dalej podano cały plik z kodem inteligentnych wskaźników, smartptr.h jest plikiem nagłówkowym, a smartptr.cpp jest plikiem kodu. Liczby w komentarzach oznaczają numery wskazówek z części I. Pliki te i odpowiadający im plik projektu Visual C++ można znaleźć w folderze smartptr na CD-ROM-ie dołączonym do książki.