TGViewer
C++ Academy C++ Academy @cpluspluc · 15.5K subscribers
Post #1545 2.38K
🛠 Как автоматически закрывать файлы из C-библиотеки в C++

FILE* можно обернуть в std::unique_ptr с собственным обработчиком освобождения:


#include <cstdio>
#include <memory>

struct FileCloser {
void operator()(std::FILE* file) const noexcept {
std::fclose(file);
}
};

using File = std::unique_ptr<std::FILE, FileCloser>;


Использование внутри функции:


File file{std::fopen("data.txt", "r")};

if (!file) {
return;
}

// Передаём FILE* в функции C-библиотеки
int ch = std::fgetc(file.get());


Когда file выйдет из области видимости, unique_ptr вызовет fclose. Это работает при обычном завершении функции, раннем return и раскрутке стека при исключении.

Так устроен RAII: время жизни ресурса связано со временем жизни объекта. Если fopen вернул nullptr, обработчик освобождения вызван не будет.
  • 🔥 11
  • ❤ 6
  • 👍 4
More from @cpluspluc
  1. Sep 18, 2026Как посчитать миллиарды уникальных значений, используя всего несколько килобайт памяти Для…
  2. Sep 17, 2026⚙️ useful_abstractions - вычисления на этапе компиляции в C++23 Библиотека упрощает работу…
  3. Sep 17, 2026Разница между C++ и Python
  4. Sep 17, 2026«Я про бэкенд»: как устроены AI-системы под капотом бигтеха 🗓 3 октября, Москва и онлайн…
  5. Sep 16, 2026💡 Алгоритм Флойда находит цикл в связном списке всего с двумя указателями и `O(1)` дополн…
  6. Sep 16, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →