Inteligentne wskaźniki to bardzo pomocne twory. Dzięki nim nie trzeba pamiętać głównie o zwolnieniu obiektu w różnych przypadkach, a o błędy z tego wynikające nietrudno.
Istnieje masa różnych implementacji inteligentnych wskaźników, od najprostszych usuwających obiekt, na który wskazują w momencie kiedy jest usuwany obiekt wskaźnika lub przypisywana jest nowa wartość, poprzez zliczające, kopiujące i masę innych. Zależnie od funkcji jakie ma spełniać i do jakich celów mamy zamiar go używać każdy może przygotować własną implementację.
Najprostsza wersja może wyglądać tak:
template <class T> class ptr { private: T* m_pointer; ptr(T& pointer) {} T& operator= (ptr& obj) {} public: ptr() : m_pointer(NULL) {} ptr(T* pointer) : m_pointer(pointer) {} ~ptr() { delete m_pointer; } T* operator-> () { return m_pointer; } T& operator* () { return *m_pointer; } T& operator= (T* pointer) { if (m_pointer != pointer) { delete m_pointer; m_pointer = pointer; } } };
Może nie powala możliwościami, ale na pewno ułatwia pracę w wielu przypadkach. Po rozszerzeniu o kilka dodatkowych funkcji można np. ręcznie unieważniać wskaźnik (wraz z automatycznym usunięciem obiektu), sprawdzać jego poprawność, itd. Wszystko zależy od kreatywności i potrzeb programisty. 
Więcej wraz z odnośnikami do różnych przykładowych implementacji można znaleźć w tekście Yonata Sharona Smart Pointers - What, Why, Which? lub po prostu googlając. Można także skorzystać z wielu gotowych implementacji dostarczanych przez różne biblioteki (np. Boost).
Jeszcze nie ma żadnych komentarzy.
Twój może być pierwszy.