На этом шаге мы приведем полное описание класса auto_ptr.
Класс auto_ptr объявлен в заголовочном файле <memory>:
#include <memory>
Шаблонный класс auto_ptr доступен для всех типов в пространстве имен std. Точное объявление auto_ptr выглядит так:
namespace std { // Вспомогательный тип. используемый при копировании и присваивании template <class Y> struct auto_ptr_ref {}; tempiate<class T> class auto_ptr { public: // Тип значения typedef T element_type; // Конструктор explicit auto_ptr(T* ptr = 0) throw(); // Копирующие конструкторы (с неявным преобразованием типа) // Обратите внимание - параметр обьявлен неконстантным! auto_ptr(const auto_ptr&) throw(); template <class U> auto_ptr (auto_ptr<U>&) throw(); // Присваивание (с неявным преобразованием типа) // Обратите внимание - параметр объявлен неконстантным! auto_ptr& operator= (auto_ptr&) throw(); tempiate<class U> auo_ptr& operator= (auto_ptr<U>&) throw(); // Деструктор ~auto_ptr() throw(); // Обращение по указателю T* get() const throw(); T& operator*() const throw(); T* operator->() const throw(); // Освобождение принадлежащего объекта T * release() throw(); // Повторная инициализация void reset(T* ptr = 0) throw(); // Специальные преобразования, // используемые при копировании и присваивании public: auto_ptr(auto_ptr_ref<T>) throw(); auto_ptr& operator= (auto_ptr_ref<T> rhs) throw(); tempiate<class U> operator auto_ptr_ref<U>() throw(); tempiate<class U> operator auto_ptr <U>() throw(); }; }
Дальше мы приведем подробные описания отдельных членов класса (сокращение auto_ptr означает auto_ptr<T>) и дадим полный пример реализации класса auto_ptr.
На следующем шаге мы рассмотрим определения типов, а также конструкторы и деструкторы.