Где я могу найти хорошую реализацию охраны Объема для своих проектов C++?

Я просто недавно узнал об охране Объема идиому C++. К сожалению, я не могу найти хорошую реализацию его.

Кто-либо может указать на меня на некоторую хорошую и применимую реализацию охраны Объема в C++?

Спасибо, Boda Cydo.

18
задан bodacydo 12 August 2010 в 11:56
поделиться

3 ответа

ScopeGuard включен в библиотеку Loki (рекламируется в Modern C ++ Design Андреем Александреску, я уверен, что вы слышали об этой замечательной книге) и достаточно зрелый, чтобы использоваться в производстве. код, имо.

Для ясности: Мы говорим о написании кода, безопасного для исключений, с использованием RAII.

Дополнительная литература (на StackOverflow): Действительно ли использование ScopeGuard приводит к улучшению кода?

8
ответ дан 30 November 2019 в 08:21
поделиться

Исходный класс ScopeGuard включен в эту статью доктора Добба Андрея Александреску и Петру Маргиняна. Немного улучшенная версия с некоторыми изменениями от Джошуа Лерера доступна здесь . (Версия Лерера - это та, которую я использую в своих проектах.) Она также включена в библиотеку Loki .

Boost теперь имеет библиотеку ScopeExit , которая более мощная, чем ScopeGuard (поскольку она может выполнять произвольный код, тогда как ScopeGuard может вызывать только одну уже существующую функцию).

Редактировать: С учетом всего вышесказанного, Scope Guard - это на самом деле просто конкретное приложение RAII, так что вы действительно должны хотя бы понимать концепцию того, как его реализовать.

15
ответ дан 30 November 2019 в 08:21
поделиться

Объект "Scope Guard" - это всего лишь один из примеров гораздо более широкой идиомы RAII.

И не существует единой реализации этого. Это то, что программист C++ должен понять, а не просто скопировать/вставить. К счастью, это также довольно тривиально реализовать.

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

И... это все. Вы также должны обработать конструктор копирования и оператор присваивания (либо клонируя ресурс, либо сделав эти две функции приватными, чтобы они никогда не вызывались).

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

0
ответ дан 30 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

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