auto_ptr_3 Оглавление
3.1
Создано системой Doxygen 1.3.5
Sun Mar 7 09:41:43 2004

Оглавление

1 auto_ptr_3 Иерархический список классов
 1.1 auto_ptr_3 Иерархия классов
2 auto_ptr_3 Алфавитный указатель классов
 2.1 auto_ptr_3 Классы
3 auto_ptr_3 Список файлов
 3.1 auto_ptr_3 Файлы
4 auto_ptr_3 Классы
 4.1 Шаблон класса auto_ptr_3::destroyable_obj_t< T >
  4.1.1 Подробное описание
  4.1.2 Конструктор(ы)
 4.2 Шаблон класса auto_ptr_3::initialized_ptr_t< T >
  4.2.1 Подробное описание
  4.2.2 Методы
 4.3 Шаблон класса auto_ptr_3::nondestroyable_obj_t< T >
  4.3.1 Подробное описание
  4.3.2 Конструктор(ы)
 4.4 Шаблон класса auto_ptr_3::obj_destruction_t< T >
  4.4.1 Подробное описание
  4.4.2 Конструктор(ы)
 4.5 Шаблон класса auto_ptr_3::obj_ptr_t< T >
  4.5.1 Подробное описание
  4.5.2 Конструктор(ы)
  4.5.3 Методы
 4.6 Шаблон класса auto_ptr_3::soft_obj_ptr_t< T >
  4.6.1 Подробное описание
  4.6.2 Конструктор(ы)
  4.6.3 Методы
5 auto_ptr_3 Файлы
 5.1 Файл obj_ptr.hpp
  5.1.1 Подробное описание

Глава 1
auto_ptr_3 Иерархический список классов

1.1 auto_ptr_3 Иерархия классов

Иерархия классов.

auto_ptr_3::initialized_ptr_t< T >
auto_ptr_3::obj_destruction_t< T >
auto_ptr_3::destroyable_obj_t< T >
auto_ptr_3::nondestroyable_obj_t< T >
auto_ptr_3::obj_ptr_t< T >
auto_ptr_3::soft_obj_ptr_t< T >
auto_ptr_3::vect_ptr_t< T >

Глава 2
auto_ptr_3 Алфавитный указатель классов

2.1 auto_ptr_3 Классы

Классы с их кратким описанием.

auto_ptr_3::destroyable_obj_t< T > (Описание объекта, который должен быть уничтожен )
auto_ptr_3::initialized_ptr_t< T > (Класс для хранения проинициализированого указателя на объект )
auto_ptr_3::nondestroyable_obj_t< T > (Описание объекта, который не должен уничтожаться )
auto_ptr_3::obj_destruction_t< T > (Базовый класс, описывающий возможность уничтожения объекта )
auto_ptr_3::obj_ptr_t< T > (Класс для автоматического уничтожения динамически созданных одиночных объектов )
auto_ptr_3::soft_obj_ptr_t< T > (Необязательное удаление одиночного объекта )

Глава 3
auto_ptr_3 Список файлов

3.1 auto_ptr_3 Файлы

Полный список документированных файлов.

obj_ptr.hpp (Работа с одиночными объектами )

Глава 4
auto_ptr_3 Классы

4.1 Шаблон класса auto_ptr_3::destroyable_obj_t< T >

Описание объекта, который должен быть уничтожен.

#include <obj_ptr.hpp>

Граф наследования:auto_ptr_3::destroyable_obj_t< T >::


PIC


Открытые члены

4.1.1 Подробное описание

template<class T> class auto_ptr_3::destroyable_obj_t< T >

Описание объекта, который должен быть уничтожен.

Начиная с:
v.3.1

См. auto_ptr_3::soft_obj_ptr_t.

4.1.2 Конструктор(ы)

4.1.2.1 template<class T> auto_ptr_3::destroyable_obj_t< T >::destroyable_obj_t (T * obj) [inline]

Инициализирующий конструктор.

Аргументы:
obj
Объект, который должен быть уничтожен.

Объявления и описания членов класса находятся в файле:

4.2 Шаблон класса auto_ptr_3::initialized_ptr_t< T >

Класс для хранения проинициализированого указателя на объект.

#include <initialized_ptr.hpp>

Открытые члены

Закрытые типы

Закрытые данные

4.2.1 Подробное описание

template<class T> class auto_ptr_3::initialized_ptr_t< T >

Класс для хранения проинициализированого указателя на объект.

Данный класс предназначен для облегчения работы с переменными/атрибутами - указателями. Проблема возникает, если переменная/атрибут объявляется, но не инициализируется.


Особенно трудноуловима подобная проблема в классах с несколькими конструкторами. При добавлении конструктора и/или атрибута легко забыть проинициализировать атрибут-указатель.


Класс initialized_ptr_t является хранилищем указателя с принудительной инициализацией указателя в конструкторе.

Внимание:
Класс initialized_ptr_t не уничтожает объект, на который указывает контролируемый указатель в своем деструкторе!

4.2.2 Методы

4.2.2.1 template<class T> const T& auto_ptr_3::initialized_ptr_t< T >::operator * () const [inline]

Получить доступ к объекту по контролируемому указателю.

Внимание:
Результат не определен, если контролируемый указатель равен 0.

4.2.2.2 template<class T> T& auto_ptr_3::initialized_ptr_t< T >::operator * () [inline]

Получить доступ к объекту по контролируемому указателю.

Внимание:
Результат не определен, если контролируемый указатель равен 0.

Объявления и описания членов класса находятся в файле:

4.3 Шаблон класса auto_ptr_3::nondestroyable_obj_t< T >

Описание объекта, который не должен уничтожаться.

#include <obj_ptr.hpp>

Граф наследования:auto_ptr_3::nondestroyable_obj_t< T >::


PIC


Открытые члены

4.3.1 Подробное описание

template<class T> class auto_ptr_3::nondestroyable_obj_t< T >

Описание объекта, который не должен уничтожаться.

Начиная с:
v.3.1

См. auto_ptr_3::soft_obj_ptr_t.

4.3.2 Конструктор(ы)

4.3.2.1 template<class T> auto_ptr_3::nondestroyable_obj_t< T >::nondestroyable_obj_t (T & obj) [inline]

Инициализирующий конструктор.

Аргументы:
obj
Объект, который не должен уничтожаться.

Объявления и описания членов класса находятся в файле:

4.4 Шаблон класса auto_ptr_3::obj_destruction_t< T >

Базовый класс, описывающий возможность уничтожения объекта.

#include <obj_ptr.hpp>

Граф наследования:auto_ptr_3::obj_destruction_t< T >::


PIC


Открытые члены

Закрытые данные

4.4.1 Подробное описание

template<class T> class auto_ptr_3::obj_destruction_t< T >

Базовый класс, описывающий возможность уничтожения объекта.

Начиная с:
v.3.1

См. auto_ptr_3::soft_obj_ptr_t.

4.4.2 Конструктор(ы)

4.4.2.1 template<class T> auto_ptr_3::obj_destruction_t< T >::obj_destruction_t (T * obj, bool is_destroyable) [inline]

Инициализирующий конструктор.

Аргументы:
obj
Объект который может быть уничтожен.
is_destroyable
Может ли объект быть уничтожен.

Объявления и описания членов класса находятся в файле:

4.5 Шаблон класса auto_ptr_3::obj_ptr_t< T >

Класс для автоматического уничтожения динамически созданных одиночных объектов.

#include <obj_ptr.hpp>

Граф наследования:auto_ptr_3::obj_ptr_t< T >::


PIC


Открытые типы

Открытые члены

Защищенные данные

Закрытые члены

4.5.1 Подробное описание

template<class T> class auto_ptr_3::obj_ptr_t< T >

Класс для автоматического уничтожения динамически созданных одиночных объектов.

4.5.2 Конструктор(ы)

4.5.2.1 template<class T> auto_ptr_3::obj_ptr_t< T >::obj_ptr_t (T * ptr) [inline]

Конструктор с инициализацией указателя на контролируемый объект.

Аргументы:
ptr
Указатель на контролируемый объект.

4.5.2.2 template<class T> auto_ptr_3::obj_ptr_t< T >::~obj_ptr_t () [inline]

Деструктор автоматически удаляет контролируемый объект, если указатель на него не равен 0.

4.5.2.3 template<class T> auto_ptr_3::obj_ptr_t< T >::obj_ptr_t (const obj_ptr_t< T > & o) [private]

Внимание:
Не имеет реализации, чтобы запретить операции копирования.

4.5.3 Методы

4.5.3.1 template<class T> void auto_ptr_3::obj_ptr_t< T >::clear () [inline]

Указать отсутствие хранимого объекта. Предыдущий хранимый объект (если был) не уничтожается.

4.5.3.2 template<class T> void auto_ptr_3::obj_ptr_t< T >::destroy () [inline]

Уничтожить хранимый объект, если таковой есть.

4.5.3.3 template<class T> T*auto_ptr_3::obj_ptr_t< T >::get () const [inline]

Получить доступ к указателю на хранимый объект. Может возвращать 0, если контролируемого объекта нет.

Заметки:
Введен для похожести на std::auto_ptr

4.5.3.4 template<class T> const T& auto_ptr_3::obj_ptr_t< T >::operator * () const [inline]

Получить доступ к хранимому объекту.

Внимание:
Результат не определен, если нет контролируемого объекта.

4.5.3.5 template<class T> T& auto_ptr_3::obj_ptr_t< T >::operator * () [inline]

Получить доступ к хранимому объекту.

Внимание:
Результат не определен, если нет контролируемого объекта.

4.5.3.6 template<class T> const T*auto_ptr_3::obj_ptr_t< T >::operator --> () const [inline]

Получить доступ к хранимому объекту.

Внимание:
Результат не определен, если нет контролируемого объекта.

4.5.3.7 template<class T> T*auto_ptr_3::obj_ptr_t< T >::operator --> () [inline]

Получить доступ к хранимому объекту.

Внимание:
Результат не определен, если нет контролируемого объекта.

4.5.3.8 template<class T> obj_ptr_t< T >& auto_ptr_3::obj_ptr_t< T >::operator= (const obj_ptr_t< T > & o) [private]

Внимание:
Не имеет реализации, чтобы запретить операции копирования.

4.5.3.9 template<class T> const T*auto_ptr_3::obj_ptr_t< T >::query () const [inline]

Получить доступ к указателю на хранимый объект. Может возвращать 0, если контролируемого объекта нет.

4.5.3.10 template<class T> T*auto_ptr_3::obj_ptr_t< T >::query () [inline]

Получить доступ к указателю на хранимый объект. Может возвращать 0, если контролируемого объекта нет.

4.5.3.11 template<class T> T*auto_ptr_3::obj_ptr_t< T >::release () [inline]

Возвращает указатель на хранимый объект после чего указатель на хранимый объект в объекте obj_ptr_t обнуляется. Т.е. после вызова метода release объект obj_ptr_t больше ничего не контролирует.


Может возвращать 0, если контролируемого объекта не было.

Заметки:
Введен для похожести на std::auto_ptr

4.5.3.12 template<class T> void auto_ptr_3::obj_ptr_t< T >::reset (T * o = 0) [inline]

Если указатель на хранимый объект не равен o, то хранимый объект уничтожается. После этого объект obj_ptr_t начинает контролировать объект o.

Заметки:
Введен для похожести на std::auto_ptr

Аргументы:
o
Указатель на новый контролируемый объект.

4.5.3.13 template<class T> void auto_ptr_3::obj_ptr_t< T >::set (T * ptr) [inline]

Установить указатель на хранимый объект. Предыдущий хранимый объект (если был) не уничтожается.

4.5.3.14 template<class T> void auto_ptr_3::obj_ptr_t< T >::swap (obj_ptr_t< T > & o) [inline]

Поменять значение двух объектов 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 >::


PIC


Открытые члены

Закрытые типы

Закрытые данные

4.6.1 Подробное описание

template<class T> class auto_ptr_3::soft_obj_ptr_t< T >

Необязательное удаление одиночного объекта.

Начиная с:
v.3.1

В некоторых случаях приходится оперировать указателями на объекты которые либо нужно удалять, либо нет. Например, при организации цепочек ввода-вывода:
// Базовый класс.  
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" );  
}

4.6.2 Конструктор(ы)

4.6.2.1 template<class T> auto_ptr_3::soft_obj_ptr_t< T >::soft_obj_ptr_t (T * ptr, bool is_must_be_destroyed) [inline]

Инициализирующий конструктор.

Аргументы:
ptr
Контролируемый объект.
is_must_be_destroyed
Должен ли объект уничтожаться в деструкторе.

4.6.2.2 template<class T> auto_ptr_3::soft_obj_ptr_t< T >::soft_obj_ptr_t (const obj_destruction_t< T > & info) [inline]

Инициализирующий конструктор.

Аргументы:
info
Описание объекта который может быть уничтожен.

4.6.3 Методы

4.6.3.1 template<class T> void auto_ptr_3::soft_obj_ptr_t< T >::reset (const obj_destruction_t< T > & info) [inline]

Заменить контролируемый объект с возможным уничтожением.

Если есть контролируемый объект и разрешено его уничтожение, то контролируемый объект уничтожается.

4.6.3.2 template<class T> void auto_ptr_3::soft_obj_ptr_t< T >::reset (T * o = 0, bool is_must_be_destroyed = true) [inline]

Заменить контролируемый объект с возможным уничтожением.

Если есть контролируемый объект и разрешено его уничтожение, то контролируемый объект уничтожается.

Аргументы:
o
Указатель на новый контролируемый объект.
is_must_be_destroyed
Разрешается ли удаление нового контролируемого объекта. На уничтожение текущего контролируемого объекта никакого влияния не оказывает.

4.6.3.3 template<class T> bool auto_ptr_3::soft_obj_ptr_t< T >::set_destroyable (bool is_destroyable) [inline]

Установить возможность уничтожения объекта в деструкторе.

Возвращает:
старое значение флага возможности уничтожения объекта в деструкторе.

Объявления и описания членов класса находятся в файле:

Глава 5
auto_ptr_3 Файлы

5.1 Файл obj_ptr.hpp

Работа с одиночными объектами.

Пространства имен

5.1.1 Подробное описание

Работа с одиночными объектами.

Hosted by uCoz