Есть несколько дизайнерских решений, которые влияют на то, как используются классы. Кроме того, классы очень похожи на стандартные контейнеры и обеспечивают почти одинаковый интерфейс. Новыми конвенциями являются:
Это делается для того, чтобы контейнеры были проще и безопаснее в использовании. Он способствует своего рода программированию без указателей, и пользователю класса не нужно беспокоиться о указателях, кроме как при их распределении (см.Пример 2). Итераторы, которые обеспечивают доступ к голым указателям, также предоставляются, поскольку они могут быть полезны в редких случаях. Например, когданачинается()возвращает итератор,ptr_begin()вернет итератор, позволяющий итерировать над сохраненными указателями.
Например, вptr_setпорядок по умолчанию выполняется с помощьюboost::ptr_less, который сравнивает опосредованные указатели. Точно так жеоператор ==()дляконтейнерасравнивает все объекты соператором == [constFoo&,constFoo&].
Это связано с тем, что большинство полиморфных объектов не могут быть скопированы напрямую, но они часто могут быть скопированы с помощью функции члена (см.Пример 4). Часто даже нет смысла клонировать объект, в этом случае большая часть операций все еще работает.
Это, конечно, также может быть удобно. Всякий раз, когда это происходит, для обеспечения безопасной передачи используется объектSmartContainer::auto_type(см.Пример 6).
Две специальные функции члена,клонивыпуск, оба возвращаютauto_ptr, которые могут быть назначены другому контейнеру указателя. Это эффективно снижает стоимость возврата контейнера к одной куче распределения плюс вызов насвоп ()(см.Пример 3).
Поскольку контейнеры в этой библиотеке обертывают стандартные контейнеры, правила признания итераторов недействительными совпадают с правилами соответствующего стандартного контейнера.
Например, для обоихboost::ptr_vectorиstd::vector< U>вставка и удаление только аннулируют удаленный элемент и элементы, следующие за ним; все элементы до вставленного/удаленного элемента остаются действительными.
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.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.