Sobes.tech
Middle

Čo je základná záruka bezpečnosti v kontexte štandardnej knižnice C++ a ako ovplyvňuje správu zdrojov?

sobes.tech AI

Odpoveď od AI

Základná záruka bezpečnosti (základná výnimková bezpečnosť) znamená, že pri výskyte výnimky je program v správnom, hoci nie nevyhnutne predvídateľnom stave. Zdroje, ako dynamická pamäť alebo súbory, ktoré boli získané funkciou pred výskytom výnimky, budú správne uvoľnené.

Toto sa dosahuje pomocou RAII (Resource Acquisition Is Initialization) — idiomu, kde vlastníctvo zdroja je spojené s životným cyklom objektu. Konštruktor objektu získava zdroj a deštruktor ho uvoľňuje. Pri odvíjaní zásobníka kvôli výnimke sa automaticky volajú deštruktory objektov vytvorených v aktuálnom bloku, čím sa zabezpečuje uvoľnenie zdrojov.

#include <vector>
#include <fstream>
#include <stdexcept>

void process_data(const std::string& filename) {
    std::vector<int> data; // Vektor (dynamická pamäť)
    std::ifstream file(filename); // Súbor (zdroj)

    if (!file.is_open()) {
        throw std::runtime_error("Cannot open file"); // Výnimka - súbor sa neotvorí
    }

    int value;
    while (file >> value) { // Čítanie dát - môže vyhodiť výnimku
        data.push_back(value); // Môže vyhodiť výnimku pri nedostatku pamäti
    }

    // Ak je výnimka vyhodená do tohto bodu (napríklad pri otváraní súboru, čítaní alebo pridávaní do vector),
    // deštruktory file (zatvára súbor) a data (uvoľňuje pamäť) budú volané,
    // zabezpečujúc základnú záruku bezpečnosti: súbor je zatvorený, pamäť je uvoľnená,
    // ale stav data môže byť neurčitý (čiastočne naplnený).

    // Ďalšie spracovanie data...
    // ...
} // Deštruktory file a data sú volané tu, ak výnimka nebola vyhodená

Pri základnej záruke:

  • Všetky invarianty tried môžu byť narušené.
  • Dáta môžu byť čiastočne zmenené.
  • Zdroje neunikajú.

Toto je slabšie ako silná záruka (stav programu sa nemení pri výnimke) a nemá žiadnu záruku (stav programu je neurčitý, môžu nastať úniky). V štandardnej knižnici mnoho operácií poskytuje základnú záruku, čo je minimálna požiadavka pre správnu prácu s výnimkami.