Шаг 68.
Библиотека STL. Вспомогательные средства. Описание класса auto_ptr. Типы, конструкторы, присваивание и деструкторы
На этом шаге мы приведем сводку результатов, связанных с типами, конструкторами, присваиванием и деструкторами.
Определения типов
Тип объекта, владельцем которого является 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.
На следующем шаге мы рассмотрим обращение к принадлежащему объекту.
Предыдущий шаг
Содержание
Следующий шаг