Sobes.tech
Middle

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.