Объект "Scope Guard" - это всего лишь один из примеров более широкой RAII идиомы.
И нет единой реализации этого. Это то, что программист на С ++ должен понимать , а не просто копировать / вставлять. К счастью, это также довольно тривиально реализовать.
Вы создаете класс, который представляет некоторый вид ресурса. Когда создается экземпляр класса (одним из его конструкторов), он должен получить ресурс и выдать исключение, если это не удалось. Когда класс уничтожен, он должен избавиться от ресурса, выполнив всю необходимую очистку.
И ... это все. Вы также должны обработать конструктор копирования и оператор присваивания (либо путем клонирования ресурса, либо делая эти две функции закрытыми, чтобы они никогда не вызывались).
Вам не нужно находить «хорошую реализацию», потому что вы собираетесь сами написать десятки и десятки различных реализаций. Их написать несложно, и их нелегко использовать повторно, поскольку каждый из них оборачивает свой тип ресурса.