Их назначение - обеспечить подсчет ссылок на объекты, когда требуется уйти от шаблонов на типы классов этих объектов. Тип объекта указывается только при создании или присвоении обобщенному указателю значения из ссылочного указателя. В других операциях (копирования, сравнения, уничтожения) тип присвоенного объекта не указывается.
Поведение обобщенного ссылочного указателя совпадает с поведением ссылочного указателя: в конструкторе происходит увеличение кол-ва ссылок на объект, в деструкторе - уменьшение, а при присвоении нового значения - увеличение ссылок на новое значение и уменьшение ссылок на старое. Если тип присвоенного объекта не поддерживает подсчет ссылок, то ни каких действий выполнено не будет.
Пример:
Class1::Ptr p1 = new Class1(1); // Создание объекта типа Class1, кол-во ссылок = 1 (объект 1). Class1::Ptr p2 = new Class1(2)); // Создание объекта типа Class1, кол-во ссылок = 1 (объект 2). ... GenericRefPtr gp1 = p1; // Увеличение кол-ва ссылок на объект 1. GenericRefPtr gp2 = p2; // Увеличение кол-ва ссылок на объект 2. ... GenericRefPtr gp = gp1; // Увеличение кол-ва ссылок на объект 1. gp = gp2; // Увеличение кол-ва ссылок на объект 2 и уменьшение на объект 1. ... // В деструкторах p1 и gp1 кол-во ссылок на объект 1 уменьшается до 0. // В деструкторах p2, gp2 и gp кол-во ссылок на объект 1 уменьшается до 0.
Данный класс наследует BasicGenericRefPtr, в котором определены основные операции над обобщенным ссылочным указателем.
В пару с обобщенным ссылочным указателем имеется обобщенный не ссылочный указатель (нешаблонный указатель на void*) GenericNoRefPtr. Обеспечивается взаимная конвертация между классами GenericRefPtr и GenericNoRefPtr.
Данный класс не обеспечивает полную многопоточность. Операция присвоения нового значения требует внешней синхронизации, при условии, что существует возможность того, что в момент присвоения источнику тоже может быть присвоено значение.
См. определение в файле GenericRefPtr.h строка 51
Открытые члены | |
GenericRefPtr () | |
Конструктор по умолчанию. | |
template<typename T> | |
GenericRefPtr (const RefPtr< T > &Src) | |
Конструктор инициализации из ссылочного указателя. | |
template<typename T> | |
GenericRefPtr (T *Src) | |
Конструктор инициализации из обычного указателя. | |
GenericRefPtr (const BasicGenericRefPtr &Src) | |
Конструктор копирования. | |
GenericRefPtr (const GenericRefPtr &Src) | |
Конструктор копирования. | |
~GenericRefPtr () | |
Уменьшает кол-во ссылок на хранимый объект. | |
template<typename T> | |
BasicGenericRefPtr & | operator= (const RefPtr< T > &Src) |
Оператор присвоения ссылочного указателя. | |
template<typename T> | |
BasicGenericRefPtr & | operator= (const T *Src) |
Оператор присвоения обычного указателя. | |
BasicGenericRefPtr & | operator= (const BasicGenericRefPtr &Src) |
Оператор присвоения. | |
BasicGenericRefPtr & | operator= (const GenericRefPtr &Src) |
Оператор присвоения. | |
void | SetNull () |
Сбросить указатель в NULL. |
Cntm::GenericRefPtr::GenericRefPtr | ( | ) | [inline] |
Конструктор по умолчанию.
Инициализирует указатель NULL. Увеличивает кол-во ссылок на присваиваемый объект.
См. определение в файле GenericRefPtr.h строка 58
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl() и Cntm::BasicGenericRefPtr::PtrPointer().
Cntm::GenericRefPtr::GenericRefPtr | ( | const RefPtr< T > & | Src | ) | [inline] |
Конструктор инициализации из ссылочного указателя.
Увеличивает кол-во ссылок на присваиваемый объект.
См. определение в файле GenericRefPtr.h строка 67
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl() и Cntm::BasicGenericRefPtr::PtrPointer().
Cntm::GenericRefPtr::GenericRefPtr | ( | T * | Src | ) | [inline] |
Конструктор инициализации из обычного указателя.
Увеличивает кол-во ссылок на присваиваемый объект.
См. определение в файле GenericRefPtr.h строка 76
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl() и Cntm::BasicGenericRefPtr::PtrPointer().
Cntm::GenericRefPtr::GenericRefPtr | ( | const BasicGenericRefPtr & | Src | ) | [inline] |
Конструктор копирования.
Увеличивает кол-во ссылок на присваиваемый объект.
См. определение в файле GenericRefPtr.h строка 84
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl() и Cntm::BasicGenericRefPtr::PtrPointer().
Cntm::GenericRefPtr::GenericRefPtr | ( | const GenericRefPtr & | Src | ) | [inline] |
Конструктор копирования.
Увеличивает кол-во ссылок на присваиваемый объект.
См. определение в файле GenericRefPtr.h строка 92
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl() и Cntm::BasicGenericRefPtr::PtrPointer().
Cntm::GenericRefPtr::~GenericRefPtr | ( | ) | [inline] |
Уменьшает кол-во ссылок на хранимый объект.
См. определение в файле GenericRefPtr.h строка 100
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl() и Cntm::BasicGenericRefPtr::PtrPointer().
BasicGenericRefPtr& Cntm::GenericRefPtr::operator= | ( | const RefPtr< T > & | Src | ) | [inline] |
Оператор присвоения ссылочного указателя.
Увеличивает ссылки на новый объект и уменьшает на старый.
См. определение в файле GenericRefPtr.h строка 109
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl(), Cntm::BasicGenericRefPtr::operator=(), Cntm::BasicGenericRefPtr::Pointer() и Cntm::BasicGenericRefPtr::PtrPointer().
BasicGenericRefPtr& Cntm::GenericRefPtr::operator= | ( | const T * | Src | ) | [inline] |
Оператор присвоения обычного указателя.
Увеличивает ссылки на новый объект и уменьшает на старый.
См. определение в файле GenericRefPtr.h строка 125
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl(), Cntm::BasicGenericRefPtr::operator=(), Cntm::BasicGenericRefPtr::Pointer() и Cntm::BasicGenericRefPtr::PtrPointer().
BasicGenericRefPtr& Cntm::GenericRefPtr::operator= | ( | const BasicGenericRefPtr & | Src | ) | [inline] |
Оператор присвоения.
Увеличивает ссылки на новый объект и уменьшает на старый.
Переопределяет метод предка Cntm::BasicGenericRefPtr.
См. определение в файле GenericRefPtr.h строка 140
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl(), Cntm::BasicGenericRefPtr::operator=(), Cntm::BasicGenericRefPtr::Pointer() и Cntm::BasicGenericRefPtr::PtrPointer().
BasicGenericRefPtr& Cntm::GenericRefPtr::operator= | ( | const GenericRefPtr & | Src | ) | [inline] |
Оператор присвоения.
Увеличивает ссылки на новый объект и уменьшает на старый.
См. определение в файле GenericRefPtr.h строка 155
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl(), Cntm::BasicGenericRefPtr::operator=(), Cntm::BasicGenericRefPtr::Pointer() и Cntm::BasicGenericRefPtr::PtrPointer().
void Cntm::GenericRefPtr::SetNull | ( | ) | [inline] |
Сбросить указатель в NULL.
Переопределяет метод предка Cntm::BasicGenericRefPtr.
См. определение в файле GenericRefPtr.h строка 170
Перекрестные ссылки Cntm::BasicGenericRefPtr::GenImpl(), Cntm::BasicGenericRefPtr::PtrPointer() и Cntm::BasicGenericRefPtr::SetNull().
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |