Код IT
← Каталог

Идиомы современного C++ — `std::unique_ptr` с custom deleter

Фрагмент из «Идиомы современного C++»: `std::unique_ptr` с custom deleter.

C++ main.cpp
using FilePtr = std::unique_ptr<std::FILE, decltype(&std::fclose)>;

FilePtr open_file(const char* path, const char* mode) {
    return FilePtr(std::fopen(path, mode), &std::fclose);
}

void load_config(const char* path) {
    auto f = open_file(path, "rb");
    if (!f) return;

    do_work(f.get());

    if (something_bad()) return; // std::fclose через deleter
}
using FilePtr = std::unique_ptr<std::FILE, decltype(&std::fclose)>;

FilePtr open_file(const char* path, const char* mode) {
    return FilePtr(std::fopen(path, mode), &std::fclose);
}

void load_config(const char* path) {
    auto f = open_file(path, "rb");
    if (!f) return;

    do_work(f.get());

    if (something_bad()) return; // std::fclose через deleter
}