Иерархия классов.
Классы с их кратким описанием.
Полный список документированных файлов.
Описание объекта, который должен быть уничтожен.
#include <obj_ptr.hpp>
Граф наследования:auto_ptr_3::destroyable_obj_t< T >::
|
Описание объекта, который должен быть уничтожен.
См. auto_ptr_3::soft_obj_ptr_t.
Инициализирующий конструктор.
Объявления и описания членов класса находятся в файле:
4.2 Шаблон класса auto_ptr_3::initialized_ptr_t< T >
Класс для хранения проинициализированого указателя на объект.
#include <initialized_ptr.hpp>
Класс для хранения проинициализированого указателя на объект.
Данный класс предназначен для облегчения работы с переменными/атрибутами - указателями. Проблема возникает, если переменная/атрибут объявляется, но не инициализируется.
Получить доступ к объекту по контролируемому указателю.
Получить доступ к объекту по контролируемому указателю.
Объявления и описания членов класса находятся в файле:
4.3 Шаблон класса auto_ptr_3::nondestroyable_obj_t< T >
Описание объекта, который не должен уничтожаться.
#include <obj_ptr.hpp>
Граф наследования:auto_ptr_3::nondestroyable_obj_t< T >::
|
Описание объекта, который не должен уничтожаться.
См. auto_ptr_3::soft_obj_ptr_t.
Инициализирующий конструктор.
Объявления и описания членов класса находятся в файле:
4.4 Шаблон класса auto_ptr_3::obj_destruction_t< T >
Базовый класс, описывающий возможность уничтожения объекта.
#include <obj_ptr.hpp>
Граф наследования:auto_ptr_3::obj_destruction_t< T >::
|
Базовый класс, описывающий возможность уничтожения объекта.
См. auto_ptr_3::soft_obj_ptr_t.
Инициализирующий конструктор.
Объявления и описания членов класса находятся в файле:
4.5 Шаблон класса auto_ptr_3::obj_ptr_t< T >
Класс для автоматического уничтожения динамически созданных одиночных объектов.
#include <obj_ptr.hpp>
Граф наследования:auto_ptr_3::obj_ptr_t< T >::
|
Класс для автоматического уничтожения динамически созданных одиночных объектов.
Конструктор с инициализацией указателя на контролируемый объект.
Деструктор автоматически удаляет контролируемый объект, если указатель на него не равен 0.
Указать отсутствие хранимого объекта. Предыдущий хранимый объект (если был) не уничтожается.
Уничтожить хранимый объект, если таковой есть.
Получить доступ к указателю на хранимый объект. Может возвращать 0, если контролируемого объекта нет.
Получить доступ к хранимому объекту.
Получить доступ к хранимому объекту.
Получить доступ к хранимому объекту.
Получить доступ к хранимому объекту.
Получить доступ к указателю на хранимый объект. Может возвращать 0, если контролируемого объекта нет.
Получить доступ к указателю на хранимый объект. Может возвращать 0, если контролируемого объекта нет.
Возвращает указатель на хранимый объект после чего указатель на хранимый объект в объекте obj_ptr_t обнуляется. Т.е. после вызова метода release объект obj_ptr_t больше ничего не контролирует.
Если указатель на хранимый объект не равен o, то хранимый объект уничтожается. После этого объект obj_ptr_t начинает контролировать объект o.
Установить указатель на хранимый объект. Предыдущий хранимый объект (если был) не уничтожается.
Поменять значение двух объектов obj_ptr_t.
Объявления и описания членов класса находятся в файле:
4.6 Шаблон класса auto_ptr_3::soft_obj_ptr_t< T >
Необязательное удаление одиночного объекта.
#include <obj_ptr.hpp>
Граф наследования:auto_ptr_3::soft_obj_ptr_t< T >::
|
Необязательное удаление одиночного объекта.
В некоторых случаях приходится оперировать указателями на объекты которые либо нужно удалять, либо нет. Например, при организации цепочек ввода-вывода:
// Базовый класс.
class stream_t { public : virtual stream_t & out( const char * what ) = 0; }; // Данный класс используется для помещения данных // в конкретный файл. class file_stream_t : public stream_t { public : virtual stream_t & out( const char * what ); ... }; // Класс, который сжимает данные, но для помещения // их в конкретный приемник использует дополнительный // объект stream_t. class gzip_stream_t : public stream_t { private : stream_t * m_to; bool m_is_must_be_destroyed; public : gzip_stream_t( // Поток, в который нужно реально помещать // преобразованные значения. stream_t * to, // Должен ли реальный поток уничтожаться // вместе с нашим объектом? bool is_must_be_destroyed ) : m_to( to ), m_is_must_be_destroyed( is_must_be_destroyed ) { } ~gzip_stream_t() { if( m_is_must_be_destroyed ) delete m_to; } virtual stream_t & out( const char * what ); ... }; |
Использовать в этом случае класс auto_ptr_3::obj_ptr_t не очень удобно, т.к. он в деструкторе всегда уничтожает контролируемый объект. Для таких случаев и предназначен класс soft_obj_ptr_t. С его помощью приведенный пример можно переписать так:
// Класс, который сжимает данные, но для помещения
// их в конкретный приемник использует дополнительный // объект stream_t. class gzip_stream_t : public stream_t { private : auto_ptr_3::soft_obj_ptr_t< stream_t > m_to; public : gzip_stream_t( // Поток, в который нужно реально помещать // преобразованные значения. stream_t * to, // Должен ли реальный поток уничтожаться // вместе с нашим объектом? bool is_must_be_destroyed ) : m_to( to, is_must_be_destroyed ) { } ~gzip_stream_t() { } virtual stream_t & out( const char * what ); ... }; |
Если использовать классы destroyable_obj_t и nondestroyable_obj_t применение класса soft_obj_ptr_t становится еще более элегантным:
// Класс, который сжимает данные, но для помещения
// их в конкретный приемник использует дополнительный // объект stream_t. class gzip_stream_t : public stream_t { private : auto_ptr_3::soft_obj_ptr_t< stream_t > m_to; public : typedef auto_ptr_3::destroyable_obj_t< stream_t > destroyable_t; typedef auto_ptr_3::nondestroyable_obj_t< stream_t > nondestroyable_t; gzip_stream_t( // Поток, в который нужно реально помещать // преобразованные значения. const auto_ptr_3::obj_destruction_t< stream_t > & to ) : m_to( to ) { } ~gzip_stream_t() { } virtual stream_t & out( const char * what ); ... }; void use_gzip( stream_t * to ) { gzip_stream_t gzip_stream( gzip_stream_t::nondestroyable_t( to ) ); gzip_stream.out( "Something" ); } |
Инициализирующий конструктор.
Инициализирующий конструктор.
Заменить контролируемый объект с возможным уничтожением.
Если есть контролируемый объект и разрешено его уничтожение, то контролируемый объект уничтожается.
Заменить контролируемый объект с возможным уничтожением.
Если есть контролируемый объект и разрешено его уничтожение, то контролируемый объект уничтожается.
Установить возможность уничтожения объекта в деструкторе.
Объявления и описания членов класса находятся в файле:
Работа с одиночными объектами.
Работа с одиночными объектами.