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

Boost.Container and C++ exceptions

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 9. Boost.Container

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

В некоторых средах, таких как разработка игр или встроенные системы, исключения C++ отключены или требуется настраиваемая обработка ошибок. Согласно документуN2271 EASTL - Электронная библиотека шаблонов искусствИсключения могут быть отменены по нескольким причинам:

  • & #8220;Обработка исключений сопряжена с определенными затратами во всех реализациях компилятора, включая те, которые позволяют избежать затрат при нормальном выполнении. Однако в некоторых случаях эта стоимость может компенсировать стоимость кода, который он заменяет.
  • & #8220;Обработка исключений часто считается превосходным решением для обработки большого диапазона значений возврата функций. Однако избегание создания функций, которые нуждаются в больших диапазонах значений возврата, лучше, чем использование обработки исключений для обработки таких значений.& #8221;
  • & #8220;Правильное обращение с исключениями может быть затруднено в случае сложного программного обеспечения.& #8221;
  • & #8220;Выполнение броска и улова может быть значительно дорогостоящим с некоторыми реализациями.& #8221;
  • & #8220;Обработка исключений нарушает дизайн C++ без оплаты за то, что вы не используете, поскольку она несет накладные расходы в любой функции без листа, которая имеет разрушаемые объекты стека независимо от того, используют ли они обработку исключений.& #8221;
  • & #8220;Подход, который обычно использует игровое программное обеспечение, заключается в том, чтобы избежать необходимости обработки исключений, где это возможно; избежать возможности обстоятельств, которые могут привести к исключениям. Например, проверьте заранее, что у подсистемы достаточно памяти, чтобы выполнять свою работу, а не пытаться справиться с проблемой с помощью обработки исключений или любых других средств после ее возникновения.& #8221;
  • & #8220;Тем не менее, некоторые библиотеки игр могут извлечь выгоду из использования обработки исключений. Однако лучше, если такие библиотеки сохраняют внутреннюю обработку исключений, чтобы они не использовали обработку исключений в остальной части приложения.& #8221;

Для поддержки сред без исключений C++ или сред с особыми потребностями обработки ошибокBoost.Containerизменяет поведение сигнализации об ошибках, когда<BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS>или<BOOST_NO_EXCEPTIONS>определено. Первое определяется пользователем, а второе может быть либо определено пользователем, либо косвенно определеноBoost.Confg, когда компилятор был вызван с соответствующим флагом (например,<-fno-exceptions>в GCC).

При работе с определяемыми пользователем классами (например, при построении определяемых пользователем классов):

  • Если<BOOST_NO_EXCEPTIONS>определено, библиотека избегает использования<try>/<catch>/<throw>утверждений. Классный автор должен обрабатывать и распространять ошибки внутри, так как никакая ошибка не будет распространяться черезBoost.Container.
  • Если<BOOST_NO_EXCEPTIONS>не определено, библиотека распространяет исключения, предлагающие гарантии исключения, подробно описанные в документации.

Когда библиотеке нужно сделать исключение (например,<out_of_range>, когда в<vector::at>используется неправильный индекс), библиотека вызывает обратный вызов, объявленный в<boost/container/throw_exception.hpp>:

  • Если<BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS>определено, то программист должен предоставить свое собственное определение для всех<throw_xxx>функций. Эти функции не могут вернуться, они должны бросить исключение или позвонить<std::exit>или<std::abort>.
  • Если<BOOST_NO_EXCEPTIONS>определено,<BOOST_ASSERT_MSG>утверждение вызывается (см.Повышение). Для получения дополнительной информации. Если это утверждение возвращается, то<std::abort>называется.
  • Кроме того, выбрасывается соответствующее стандартное исключение из библиотеки (например,<std::out_of_range>).

PrevUpHomeNext

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




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



:: Главная :: Chapter 9. Boost.Container ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:00:34/0.0067760944366455/0