На этом шаге мы приведем полное описание класса 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.
На следующем шаге мы рассмотрим определения типов, а также конструкторы и деструкторы.