Что предназначено Приобретением ресурса является инициализацией (RAII)?

Что предназначено Приобретением ресурса является инициализацией (RAII)?

248
задан sbi 5 March 2014 в 18:08
поделиться

1 ответ

Это идиома программирования, которая кратко означает, что вы

  • заключаете ресурс в класс (конструктор которого обычно - но не обязательно** - приобретает ресурс, а деструктор всегда его освобождает)
  • используете ресурс через локальный экземпляр класса*
  • ресурс автоматически освобождается, когда объект выходит из области видимости

Это гарантирует, что что бы ни случилось, пока ресурс используется, он в конце концов будет освобожден (будь то из-за обычного возврата, уничтожения содержащего объекта, или выброшенного исключения).

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

* Обновление: "local" может означать локальную переменную или нестатическую переменную-член класса. В последнем случае переменная-член инициализируется и уничтожается вместе с объектом-владельцем.

** Update2: как отметил @sbi, ресурс - хотя часто выделяется внутри конструктора - может быть выделен и снаружи и передан в качестве параметра.

117
ответ дан 23 November 2019 в 02:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: