Когда происходит сохранение значения в перечне, ссылочный указатель преобразуется в обычный, когда происходит перечисление эл-тов - наоборот - из обычного в ссылочный. При этом следует учитывать, что если ссылочный объект находится в удаляемом состоянии, то в результате преобразования обычного указателя к ссылочному, последний примет значение NULL, однако перечислитель автоматически пропускает указатели на NULL, т.о. текущее значение перечислителя никогда не будет равняться NULL. В качестве параметра шаблона указывается тип объекта.
Данный класс может использоваться, когда требуется такая регистрация ссылочных объектов, которая не приводила бы к хранению ссылок на объекты. В этом случае при создании объект регистрирует себя в перечне, а перед уничтожением - уничтожает регистрацию (например, в деструкторе). В какой бы момент не происходило перечисление, если на объект есть ссылки, то будет возвращен ссылочный указатель на этот объект, если объект находится в удаляемом состоянии, но он еще не изъял свой указатель из перечня, то при перечислении он будет пропущен, если же объект изъял свой указатель из перечня, то он уже не будет перечислен.
Отличие данного класса от Cntm::NoRefPtrRegister состоит в том, что он является объектом с подсчетом ссылок, а эл-ты перечня и перечислители используют ссылочные указатели. Т.о. имеется гарантия того, что перечень будет существовать, пока существует хоть один перечислитель или эл-т, зарегистрировавший свое значение в данном перечне.
Класс обеспечивает многопоточность.
См. определение в файле NoRefPtrRegisterEx.h строка 35
Открытые типы | |
typedef RefPtr < NoRefPtrRegisterEx > | Ptr |
typedef RegisterEx < RefPtr< T >, SpecUtils::NoRefPtrStorage < T > > | RegisterType |
Открытые члены | |
Enumerator | GetEnumerator (bool DynamicExpanded=true) const |
Получить объект перечислителя для доступа к эл-там. | |
Классы | |
class | Enumerator |
Класс перечислителя. Подробнее... |
typedef RefPtr< NoRefPtrRegisterEx > Cntm::NoRefPtrRegisterEx< T >::Ptr |
Переопределяет метод предка Cntm::RegisterEx< ValueT, StoreT >.
См. определение в файле NoRefPtrRegisterEx.h строка 39
typedef RegisterEx< RefPtr < T >, SpecUtils::NoRefPtrStorage < T > > Cntm::NoRefPtrRegisterEx< T >::RegisterType |
См. определение в файле NoRefPtrRegisterEx.h строка 41
Enumerator Cntm::NoRefPtrRegisterEx< T >::GetEnumerator | ( | bool | DynamicExpanded = true |
) | const [inline] |
Получить объект перечислителя для доступа к эл-там.
DynamicExpanded | - true (значение по умолчанию) - перечислитель будет перечислять эл-ты, добавленные в перечень после создания перечислителя, false - перечислитель будет переслять только те эл-ты, которые были в перечне на момент создания перечислителя (удаленные эл-ты перечислитель не перечисляет в любом случае). |
Переопределяет метод предка Cntm::RegisterEx< ValueT, StoreT >.
См. определение в файле NoRefPtrRegisterEx.h строка 94
Перекрестные ссылки Cntm::RegisterEx< ValueT, StoreT >::Enumerator.
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |