Шаг 67.
Библиотека STL.
Вспомогательные средства. Подробное описание класса auto_ptr

    На этом шаге мы приведем полное описание класса 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();
  };
}


   Замечание. Здесь приводится слегка усовершенствованная версия, в которой исправлены некоторыс недочеты стандарта C++ (тип auto_ptr_ref объявлен глобальным, а также добавлен оператор присваивания auto_ptr_ref в auto_ptr;).

    Дальше мы приведем подробные описания отдельных членов класса (сокращение auto_ptr означает auto_ptr<T>) и дадим полный пример реализации класса auto_ptr.

    На следующем шаге мы рассмотрим определения типов, а также конструкторы и деструкторы.




Предыдущий шаг Содержание Следующий шаг