C++ стандарт китепканасынын контекстинде негизги коопсуздук кепилдиги эмне жана ал ресурстарды башкарууга кандай таасир этет?
sobes.tech AI
AIден жооп
Базовая гарантия безопасности (basic exception safety) означает, что при возникновении исключения программа находится в корректном, хотя и не обязательно предсказуемом, состоянии. Ресурсы, такие как динамическая память или файловые дескрипторы, которые были захвачены функцией до возникновения исключения, будут корректно освобождены.
Тоо жеткиликтүү болот RAII (Resource Acquisition Is Initialization) колдонуу менен — идиом, анда ресурстун ээлиги объекттин жашоо цикли менен байланыштуу. Объекттин конструктору ресурсту алат, ал эми деструктору аны бошотот. Стекти кайтарганда, чыгуу учурунда, учурдагы блокто түзүлгөн объекттердин деструкторлору автоматтык түрдө чакырылат, ресурстарды бошотуу үчүн:
#include <vector>
#include <fstream>
#include <stdexcept>
void process_data(const std::string& filename) {
std::vector<int> data; // Вектор (динамикалык эс тутум)
std::ifstream file(filename); // Файл (ресурс)
if (!file.is_open()) {
throw std::runtime_error("Cannot open file"); // Исключение - файл ачылбайт
}
int value;
while (file >> value) { // Маалыматты окуу - исключение чыгарышы мүмкүн
data.push_back(value); // Эс тутумдун жетишсиздигинен исключение чыгарышы мүмкүн
}
// Эгер исключение ушул чекитке чейин чыгарыла турган болсо (мисалы, файлды ачууда, окууда же vectorго кошууда),
// file (файлды жабуу) жана data (эс тутумду бошотуу) деструкторлору чакырылат,
// негизги кепилдикти камсыз кылуу: файл жабык, эс тутум бошотулган,
// бирок data абалы анык эмес болушу мүмкүн (бөлүнгөн).
// Data менен ары карай иштөө...
// ...
} // file жана data деструкторлору бул жерде чакырылат, эгер исключение чыгарыла элек болсо
Негизги кепилдик менен:
- Бардык класстардын инварианттары бузулушу мүмкүн.
- Маалыматтар бөлүнүп өзгөрүшү мүмкүн.
- Ресурстар агып кетпейт.
Бул күчтүү кепилдиктен (программа абалы исключение учурунда өзгөрбөйт) алда канча алсыз жана кепилдик жок (программа абалы анык эмес, агып кетүүлөр болушу мүмкүн). Стандарттык китепканада көптөгөн операциялар негизги кепилдикти камсыз кылат, бул исключениелер менен иштөө үчүн минималдуу талап болуп саналат.