Standart C++ kütüphanesi bağlamında temel güvenlik garantisi nedir ve kaynak yönetimini nasıl etkiler?
sobes.tech yapay zeka
AI'dan gelen yanıt
Temel güvenlik garantisi (temel istisna güvenliği), bir istisna oluştuğunda programın doğru, ancak mutlaka tahmin edilebilir olmayan bir durumda olduğunu ifade eder. Dinamik bellek veya dosya tanıtıcıları gibi kaynaklar, istisna oluşmadan önce fonksiyon tarafından edinilmişse, doğru şekilde serbest bırakılır.
Bu, RAII (Resource Acquisition Is Initialization) kullanımıyla başarılır — kaynak sahipliği, nesnenin yaşam döngüsüyle ilişkilendirilir. Nesnenin yapıcı fonksiyonu kaynağı edinir, yıkıcı fonksiyonu ise serbest bırakır. Bir istisna nedeniyle yığın aşağı doğru çözüldüğünde, mevcut blokta oluşturulan nesnelerin yıkıcıları otomatik olarak çağrılır ve kaynakların serbest bırakılması garanti edilir.
#include <vector>
#include <fstream>
#include <stdexcept>
void process_data(const std::string& filename) {
std::vector<int> data; // Vektör (dinamik bellek)
std::ifstream file(filename); // Kaynak: dosya
if (!file.is_open()) {
throw std::runtime_error("Dosya açılamıyor"); // İstisna - dosya açılamaz
}
int value;
while (file >> value) { // Veri okuma - istisna atabilir
data.push_back(value); // Bellek yetersizliği durumunda istisna atabilir
}
// Eğer istisna bu noktadan önce (örneğin, dosya açarken, okurken veya vektöre eklerken) atılırsa,
// file (dosyayı kapatır) ve data (belleği serbest bırakır) yıkıcıları otomatik olarak çağrılır,
// temel güvenlik garantisi sağlanır: dosya kapatılır, bellek serbest bırakılır,
// ancak data durumu belirsiz olabilir (kısmen doldurulmuş).
// data üzerinde ek işlem...
// ...
} // file ve data yıkıcıları burada çağrılır, eğer istisna atılmadıysa
Temel güvenlik garantisiyle:
- Tüm sınıf değişmezleri bozulabilir.
- Veriler kısmen değiştirilebilir.
- Kaynaklar sızmaz.
Bu, güçlü garantiden (istisna durumunda program durumu değişmez) daha zayıftır ve garanti yoktur (program durumu belirsizdir, sızıntılar olabilir). Standart kütüphanede, birçok işlem temel garantiyi sağlar, bu da istisnalarla düzgün çalışmak için minimum gereksinimdir.