Daily bit(e) C++. Работа с устаревшими ресурсами с использованием std::unique_ptr
Добавлено 17 августа 2026 в 07:24
Daily bit(e) C++ 85, обертывание устаревших ресурсов с помощью std::unique_ptr.

Типичный шаблон для устаревших API – это когда функция инициализации возвращает непрозрачный указатель, который необходимо освободить, вручную вызвав функцию очистки.
std::unique_ptr может служить здесь вспомогательным инструментом, поскольку он принимает пользовательские функции удаления (делитеры). К сожалению, интерфейс не очень эргономичен, что мы можем исправить, введя короткий вспомогательный метод.
#include <memory>
#include <cstdio>
template <typename P, typename D>
auto wrap_unique(P* pointer, D&& deleter)
{
return std::unique_ptr<P, D>{
pointer,
std::forward<D>(deleter)
};
}
int main()
{
auto file = wrap_unique(
fopen("/dev/null", "r"),
[](std::FILE* fp) noexcept {
fclose(fp);
});
// файл будет автоматически закрыт, когда
// выйдет из области видимости
}
