რა არის საბაზისო უსაფრთხოების გარანტია C++ სტანდარტული ბიბლიოთეკის კონტექსტში და როგორ ახდენს ის გავლენას რესურსების მართვაზე?
sobes.tech AI
პასუხი AI-სგან
Բազային անվտանգության երաշխիք (հիմնական արտահայտության անվտանգության մակարդակ) նշանակում է, որ արտակարգ իրավիճակի առաջացման դեպքում ծրագիրը գտնվում է ճիշտ, թեև ոչ պարտադիր կանխատեսելի վիճակում: Արժեքները, ինչպիսիք են դինամիկ հիշողությունը կամ ֆայլային դեսկրիպտորները, որոնք ձեռք են բերվել ֆունկցիայից առաջ արտակարգ իրավիճակի առաջացման, ճիշտ կերպով ազատվում են:
Սա հասնում է 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-ի դեստրուկտորները կանչվում են այստեղ, եթե արտակարգ իրավիճակ չի առաջացել
Հիմնական երաշխիքով՝
- Բոլոր դասի ինվարիանտները կարող են խախտվել:
- Տվյալները կարող են փոփոխվել մասամբ:
- Ռեսուրսները չեն թափվում:
Սա ավելի թույլ է, քան ուժեղ երաշխիքը (ծրագիրը չի փոխվում արտակարգ իրավիճակից հետո), և չկա երաշխիք (ծրագրի վիճակը անորոշ է, հնարավոր են լճումներ): Ստանդարտ գրադարանում շատ գործողություններ ապահովում են հիմնական երաշխիք, որը նվազագույն պահանջն է արտակարգ իրավիճակների ճիշտ աշխատանքի համար։