Technika RAII a blok finally
C++ 14

image_printTisk

Tento článek pojednává o technice či metodě RAII sloužící ke korektní správě prostředků i při vyhození výjimky a dále popisu bloku finally, který sice v syntaxi jazyka C++ není přímo zakotven, ale známe ho z jiných jazyků jako C# nebo Java.

Technika RAII

Zkratka RAII v angličtině znamená “Resource Acquisition Is Initialization”. Jakou techniku tato zkratka reprezentuje a k čemu slouží?

Představme si, že potřebujeme získat nějaký zdroj typu alokovaná paměť, databázové připojení nebo chceme otevřít nějaký soubor. Pokud vše proběhne v pořádku, prostředek získáme a při regulérním ukončení funkce zase ukončíme. Když odmyslíme situaci, kdy se nám například struktura příkazů příslušné funkce bude stávat složitější a my musíme neustále myslet na to, abychom třeba uvolnili příslušné prostředky ve všech větvích ukončení dané funkce příkazem return, může nastat i problém, kdy se nám vyvoláním výjimky dostane situace s uvolněním získaných prostředků mimo kontrolu. K řešení následujících situací se právě používá technika RAII, kterou si vzápětí představíme.

K demonstraci RAII použijeme dvě funkce za standardní knihovny C, a to fopenfclose. První slouží k otevření souboru a druhá k jeho zavření. Napřed si ale uvedeme příslušný příklad.

#include <cstdio>
using namespace std;

class FileNotFoundException {};

class FileHandle {
    FILE* handle = nullptr;
public:
    FileHandle(const char* filename, const char* mode) {
        handle = fopen(filename, mode);
        if(! handle)
            throw FileNotFoundException();
    }

    ~FileHandle() {
        fclose(handle);
    }

    FILE* getHandle() const { return handle; }
};

 

Blok finally

 

image_printTisk
Technika RAII a blok finally
C++ 14
Ohodnoťte tento článek

Související články

  • Obsluha chyb pomocí výjimek Tento článek je článkem úvodním tematice obsluhy chyb v jazyce C++. V tomto článku si představíme motivaci zavedení výjimek jazyka C++ jako aparátu pro detekci a zpracování chyb. Dále […]
  • Šablony tříd Tak, jak lze vytvářet šablony funkcí, lze vytvářet i šablony tříd, struktur a unionů. Pomocí těchto šablon potom překladač generuje nové uživatelsky definované datové typy. Ukážeme si […]
  • Datový typ “string” podrobněji Datový typ string nás provází od počátku studia jazyka C++ na těchto stránkách. V tomto článku se hlouběji seznámíme, jak funguje a co nám nabízí za funkce, které pro práci s textem můžeme […]
  • Konstanty Tento článek si klade za cíl vysvětlit význam a princip fungování konstant v jazyce C++. Seznámíme se s důvody jejich zavedení, uvedu zde dvě formy jejich zápisu a krátce záměrně odbočím […]
  • První program v C++ Při vysvětlování jazyka C++ začneme tím nejklasičtějším příkladem, a to je varianta programu "Ahoj, světe". Vysvětlíme si primárně důležitost funkce jménem main, jejíž význam bude na první […]
  • Číselné datové typy V této kapitole se objasníme pojem, co je to datový typ. Dále si ukážeme základní číselné datové typy, se kterými jazyk C++ operuje a předvedeme si různé varianty zápisu čísel, hlavně […]