Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost Pointer Container Library

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Boost Pointer Container Library

Conventions

Есть несколько дизайнерских решений, которые влияют на то, как используются классы. Кроме того, классы очень похожи на стандартные контейнеры и обеспечивают почти одинаковый интерфейс. Новыми конвенциями являются:

Null pointers are not allowed by default

Если пользователь попытается вставить нулевой указатель, операция выдаст.Bad_pointerисключение (см.Пример 1).

Используйтеnullable, чтобы разрешить нулевые указатели.

Обратите внимание, что все предварительные условия формы

x != 0;

не активны, когда вы инстанцировали контейнер сотменяемым, как в

boost::ptr_vector< boost::nullable<animal> > vec;
vec.push_back( 0 ); // ok

All default iterators apply an extra layer of indirection

Это делается для того, чтобы контейнеры были проще и безопаснее в использовании. Он способствует своего рода программированию без указателей, и пользователю класса не нужно беспокоиться о указателях, кроме как при их распределении (см.Пример 2). Итераторы, которые обеспечивают доступ к голым указателям, также предоставляются, поскольку они могут быть полезны в редких случаях. Например, когданачинается()возвращает итератор,ptr_begin()вернет итератор, позволяющий итерировать над сохраненными указателями.

All comparison operations are done on the pointed to objects and not at the pointer level

Например, вptr_setпорядок по умолчанию выполняется с помощьюboost::ptr_less, который сравнивает опосредованные указатели. Точно так жеоператор ==()дляконтейнерасравнивает все объекты соператором == [constFoo&,constFoo&].

Stored elements are required to be Cloneable for a subset of the operations

Это связано с тем, что большинство полиморфных объектов не могут быть скопированы напрямую, но они часто могут быть скопированы с помощью функции члена (см.Пример 4). Часто даже нет смысла клонировать объект, в этом случае большая часть операций все еще работает.

Whenever objects are inserted into a container, they are cloned before insertion

Это необходимо, поскольку все указательные контейнеры являются собственностью хранимых объектов (см.Пример 5).

Whenever pointers are inserted into a container, ownership is transferred to the container

Все контейнеры являются собственностью хранимых указателей, и поэтому контейнер должен иметь свои собственные копии (см.Пример 5).

Ownership can be transferred from a container on a per pointer basis

Это, конечно, также может быть удобно. Всякий раз, когда это происходит, для обеспечения безопасной передачи используется объектSmartContainer::auto_type(см.Пример 6).

Ownership can be transferred from a container to another container on a per iterator range basis

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

A container can be cheaply returned from functions either by making a clone or by giving up ownership of the container

Две специальные функции члена,клонивыпуск, оба возвращаютauto_ptr, которые могут быть назначены другому контейнеру указателя. Это эффективно снижает стоимость возврата контейнера к одной куче распределения плюс вызов насвоп ()(см.Пример 3).

Iterators are invalidated as in the corresponding standard container

Поскольку контейнеры в этой библиотеке обертывают стандартные контейнеры, правила признания итераторов недействительными совпадают с правилами соответствующего стандартного контейнера.

Например, для обоихboost::ptr_vectorиstd::vector< U>вставка и удаление только аннулируют удаленный элемент и элементы, следующие за ним; все элементы до вставленного/удаленного элемента остаются действительными.


Навигация:


Copyright:Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt).

Статья Boost Pointer Container Library раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 16:23:13/0.0045170783996582/0