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

Safe hooks

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 17. Boost.Intrusive

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

PrevUpHomeNext

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

//Configuring the safe mode explicitly
class Foo : public list_base_hook< link_mode<safe_link> >
{};

В безопасном режиме пользователь может определить, действительно ли объект вставлен в контейнер без какой-либо внешней ссылки. Рассмотрим основные особенности безопасного режима:

  • Конструктор Крюка помещает крюк в известное состояние по умолчанию.
  • Деструктор Крюка проверяет, находится ли крюк в известном состоянии по умолчанию. Если нет, то высказывается утверждение.
  • Каждый раз, когда объект вставляется в интрузивный контейнер, контейнер проверяет, находится ли крюк в известном состоянии по умолчанию. Если нет, то высказывается утверждение.
  • Каждый раз, когда объект стирается из навязчивого контейнера, контейнер помещает стертый объект в известное состояние по умолчанию.

С помощью этих функций без какой-либо внешней ссылки пользователь может узнать, был ли объект вставлен в контейнер, позвонив в функцию члена is_linked(). Если объект фактически не вставлен в контейнер, крючок находится в состоянии по умолчанию, а если он вставлен в контейнер, крючок не находится в состоянии по умолчанию.

По умолчанию все утверждения безопасного режима, поднятые Навязчивые крючки и контейнеры , реализуются с использованием BOOST_ASSERT, который может быть настроен пользователем. См. http://www.boost.org/libs/utility/assert.html для получения дополнительной информации о BOOST_ASSERT.

BOOST_ASSERT настроен глобально, поэтому пользователь может захотеть переопределить навязчивые утверждения безопасного режима без изменения глобального BOOST_ASSERT. Это может быть достигнуто путем переопределения следующих макросов:

  • BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT: Это утверждение будет использоваться в функциях вставки интрузивных контейнеров для проверки того, что крючок значения, подлежащего вставке, построен по умолчанию.
  • BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT: Это утверждение будет использоваться в деструкторах крючков для проверки того, что крюк находится в состоянии по умолчанию.

Если какой-либо из этих макросов не будет переопределен, утверждение будет по умолчанию BOOST_ASSERT. Если определен BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT или BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT и программисту необходимо включить файл для настройки этого утверждения, он может определить BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_INCLUDE или BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT_INCLUDE с указанием имени файла:

#define BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT          MYASSERT
#define BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT_INCLUDE <myassert.h>

PrevUpHomeNext

Статья Safe hooks раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 17. Boost.Intrusive может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 17. Boost.Intrusive ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:15:29/0.028033018112183/1