Они применяются, например, в COM для автоматического подсчёта ссылок. Выглядти примерно так:
template<class T>
class SmartPointer<T>
{
T *m_pointer;
public:
SmartPointer(T* p):m_pointer(p){m_pointer->AddRef();};
~SmartPointer() {m_pointer->Release();};
T* operator () {return m_pointer;}
}
После этого вместо T* используешь SmartPointer<T>, и о подсчёте ссылок можешь забыть
Исправлено форматирование. Пожалуйста, пользуйтесь тэгами [c] ... [/c], [code] ... [/code] и т.п. для выделения фрагментов кода. -- ПК.