Шумо дар бораи кафолатҳои бехатарии истисноҳо чӣ медонед?
sobes.tech AI
Ҷавоб аз AI
Гарантиҳои бехатарии истисноҳо муайян мекунанд, ки функсия дар ҳолати пайдоиши истисно чӣ рафтор мекунад. Чор сатҳи гарантияҳо фарқ мекунанд:
-
Гарантияи асосӣ (Basic guarantee): Агар функсия истисно барорад, барнома дар ҳолати эътибор мемонад. Манбаъҳо гум намешаванд (масалан, хотира озод мешавад), аммо ҳолати дақиқи объектҳо метавонад номаълум бошад. Имкон дорад бо барнома идома дод.
// Намунаи гарантияи асосӣ void basic_guarantee_function(std::vector<int>& vec, int value) { // Мумкин аст, ки дар вақти ворид кардани элемент истисно пайдо шавад vec.push_back(value); // Агар истисно пайдо шавад, vec метавонад дар ҳолати номуайян бошад (тарафа тағир ёфтааст), // аммо хотираи барои vec таъиншуда дуруст озод мешавад дар вақти баромад аз доираи назар. } -
Гарантияи қавӣ (Strong guarantee): Агар функсия истисно барорад, ҳолати барнома ҳамон бо ҳолати пеш аз даъват мемонад. Ҳама тағирот бекор карда мешаванд.
// Намунаи гарантияи қавӣ // Мо истифода мебарем идиом Copy-and-Swap барои таъмин кардани гарантияи қавӣ class Resource { int* data; size_t size; public: Resource(size_t s) : size(s), data(new int[s]) {} ~Resource() { delete[] data; } Resource(const Resource& other) : size(other.size), data(new int[other.size]) { std::copy(other.data, other.data + size, data); // Мумкин аст, ки истисно барорад } Resource& operator=(Resource other) // Тасвир ба арзиш { swap(*this, other); // Не истисно барорад return *this; } friend void swap(Resource& first, Resource& second) noexcept { using std::swap; swap(first.data, second.data); swap(first.size, second.size); } // ... дигар аъзои }; void strong_guarantee_function(Resource& res, size_t new_size) { Resource temp(new_size); // Агар дар ин ҷо истисно барояд, res тағир намеёбад res = temp; // Истифодаи оператори = фармоишшуда, ки гарантияи қавиро таъмин мекунад } -
Гарантияи бе истисно (No-throw guarantee): Функсия кафолат медиҳад, ки ҳеҷ гоҳ истисно намебарорад. Ин гуна функсияҳо бо спецификатори
noexceptнишон дода мешаванд.// Намунаи бе истисно void no_throw_function() noexcept { // Ҳеҷ амале нест, ки истисно барорад int a = 5; int b = 10; int c = a + b; } -
Гарантияи нокомӣ (Failure guarantee): Дар контексти бехатарии истисноҳо, баъзан ин сатҳ зикр мешавад, ки маънои он аст, ки функсия метавонад барномаро дар ҳолати номуайян гузорад, эҳтимолан бо сарфаи манбаъҳо ё хатоҳо. Ин дар асл норасогии гарантияҳо мебошад. Ин рафтор бояд аз он худдорӣ кард.
Муҳимияти гарантияҳои бехатарии истисноҳо дар он аст, ки коди боэътимод ва пешгӯишаванда эҷод мекунад, ки хатоҳо ва идоракунии манбаъҳоро дуруст ҳангоми пайдоиши истисноҳо идора мекунад. Сатҳи гарантия интихобшуда аз аҳамияти амалиёт, арзиши баргардонидан ва эҳтимолияти пайдоиши истисно вобаста аст.
Таблиғи муқоиса:
| Гарантия | Ҳолат дар ҳолати пайдоиши истисно | Интегратсияи додаҳо | Сурхшавии манбаъҳо |
|---|---|---|---|
| Асосӣ | Мутобиқ, аммо номуайян | Гарантӣ дода намешавад | Не |
| Қавӣ | Нагузошта (монанди пеш аз даъват) | нигоҳ дошта мешавад | Не |
| Бе истисно | Ҳеҷ гоҳ рух намедиҳад (ҳеҷ истисно нест) | N/A | N/A |
| Нокомӣ (на) | Номуайян, эҳтимолан вайроншавӣ ё хатоҳо | Гарантӣ дода намешавад | Мумкин аст |