Описание класса auto_ptr. Типы, конструкторы, присваивание и деструкторы

   
На этом шаге мы приведем сводку результатов, связанных с типами, конструкторами, присваиванием и деструкторами.

Определения типов

   

  auto_ptr::element_type

   
Тип объекта, владельцем которого является auto_ptr.
Конструкторы, присваивание и деструкторы

   

  auto_ptr::auto_ptr() throw()
  • Конструктор по умолчанию.
  • Создает экземпляр auto_ptr, не владеющий никаким объектом.
  • Инициализирует значение auto_ptr нулем.
  explicit auto_ptr::auto_ptr (T* ptr) throw()
  • Создает экземпляр auto_ptr, владеющий объектом, на который ссылается ptr, и указывает на него.
  • После вызова *this становится владельцем объекта, на который ссылается ptr. Других владельцев быть не должно.
  • Если указатель ptr не является null-указателем, он должен содержать значение, полученное при вызове new,
    потому что деструктор auto_ptr автоматически вызывает delete для принадлежащего ему объекта.
  • Конструктор не должен вызываться для значения, полученного при создании массива оператором new []. С массивами
    следует использовать контейнерные классы STL.
  auto_ptr::auto_ptr (auto_ptr& ар) throw()
  tempiate<class U> auto_ptr::auto_ptr (auto_ptr<U>& ap) throw()
  • Копирующий конструктор (для неконстантных значений).
  • Создает экземпляр auto_ptr, к которому переходит право владения объектом, принадлежавшим экземпляру ар.
  • После выполнения операции экземпляр ар перестает быть владельцем объекта, а его значение становится равным
    null-указателю. Таким образом, в отличие от обычных реализаций копирующего конструктора происходит модификация
    исходного объекта.
  • Обратите внимание: функция перегружается шаблонной функцией класса. Тем самым обеспечивается возможность
    автоматического преобразования типа ар к типу созданного экземпляра auto_ptr (например, указателя auto_ptr
    на объект производного класса в указатель auto_ptr на объект базового класса).
  • Передача права владения рассматривается на шаге 60.
  auto_ptr& auto_ptr::operator* (auto_ptr& ap) throw()
  tempiate<class U> auto_ptr& auto_ptr::operator= (auto_ptr<U>& ap) throw()
  • Оператор присваивания (для неконстантных значений).
  • Удаляет объект, ранее принадлежавший экземпляру, и принимает право владения объектом, ранее принадлежавшим ар.
  • После выполнения операции экземпляр ар перестает быть владельцем объекта, а его значение становится равным
    null-указателю. Таким образом, в отличие от обычных реализаций оператора присваивания происходит модификация
    исходного объекта.
  • Объект, на который ссылается экземпляр auto_ptr в левой части оператора присваивания (*this), удаляется
    вызовом delete.
  • Обратите внимание: функция перегружается шаблонной функцией класса. Тем самым обеспечивается возможность
    автоматического преобразования типа ар к типу *this (например, указателя auto_ptr на объект производного
    класса в указатель auto_ptr на объект базового класса).
  • Передача права владения рассматривается на шаге 60.
  auto_ptr::~auto_ptr () throw()
  • Деструктор.
  • Если экземпляр auto_ptr владеет объектом, для этого объекта вызывается delete.

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий