0Pricing
C++ Academy · Ders

Kapsam Koruyucuları

Kapsamdan çıkarken temizleme işlemi çalıştırın

Kapsam Koruyucuları, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Kapsam Koruyucusu Nedir?

Kapsam koruyucusu, tek görevi kapsamdan çıktığında, hatta erken dönüş veya istisna durumunda bile bir temizleme işlemi çalıştırmak olan bir RAII nesnesidir.

Çözdüğü Sorun

Bir koruyucu olmadan, erken bir return veya throw sonrasında temizlemeyi unutmak kolaydır. Kapsam koruyucusu bu işlemi otomatik hâle getirir.

lock_guard: Standart Kapsam Koruyucusu

std::lock_guard, oluşturulurken bir karşılıklı dışlamalı kilit alır ve yok edilirken kilidi açar; kilitler için yerleşik bir kapsam koruyucusudur.

#include <mutex>

std::mutex m;

void critical() {
    std::lock_guard<std::mutex> lk(m);   // locked
    // ... work ...
}                                        // unlocked automatically

Elle Yazılmış Bir Koruyucu

Bir işlevi tutan ve onu yıkıcıda çağıran bir koruyucu yazabilirsiniz.

#include <iostream>
#include <functional>

class ScopeGuard {
    std::function<void()> fn;
public:
    ScopeGuard(std::function<void()> f) : fn(std::move(f)) {}
    ~ScopeGuard() { fn(); }
};

int main() {
    ScopeGuard g([] { std::cout << "cleanup\n"; });
    std::cout << "work\n";
}

Temizleme Erken Dönüşte Çalışır

Yıkıcı kapsamdan çıkılırken çalıştığı için koruyucunun işlemi, işlevin nasıl sonlandığından bağımsız olarak yürütülür.

#include <iostream>
#include <functional>

class ScopeGuard {
    std::function<void()> fn;
public:
    ScopeGuard(std::function<void()> f) : fn(std::move(f)) {}
    ~ScopeGuard() { fn(); }
};

void run(bool stop) {
    ScopeGuard g([] { std::cout << "always cleaned\n"; });
    if (stop) return;
}

int main() { run(true); }

Temizleme İstisnada Çalışır

Bir istisna kapsam boyunca yığını çözerse koruyucunun yıkıcısı yine çalışır ve kaynağı güvenle serbest bırakır.

Koruyucuyu İptal Etme

Bazen temizlemeyi atlamak istersiniz (işlem başarıyla tamamlanmıştır). Gerçek koruyucular, işlemi devre dışı bırakmak için dismiss() sunar.

#include <iostream>
#include <functional>

class ScopeGuard {
    std::function<void()> fn;
    bool active = true;
public:
    ScopeGuard(std::function<void()> f) : fn(std::move(f)) {}
    void dismiss() { active = false; }
    ~ScopeGuard() { if (active) fn(); }
};

int main() {
    ScopeGuard g([] { std::cout << "rollback\n"; });
    g.dismiss();   // success: no rollback
}

Geri Alma İçin Kullanma

Kapsam koruyucuları işlemsel kodlarda çok etkilidir: bir geri alma işlemi kaydedin, çalışmayı gerçekleştirin ve başarı durumunda koruyucuyu iptal edin.

Koruyucular Yalnızca Taşınabilir Olmalıdır

Bir koruyucu kopyalanmamalıdır; kopyalama işlemi eylemin iki kez çalışmasına neden olur. Koruyucuları yalnızca taşınabilir veya kopyalanamaz hâle getirin.

Standart ve Kitaplık Yardımcıları

std::scoped_lock birden çok karşılıklı dışlamalı kilidi korur; GSL gibi kitaplıklar da finally sağlar. Birçok kod tabanı küçük bir ScopeGuard yardımcı programı sunar.

Özel RAII Türlerini Tercih Edin

Özel bir RAII türü mevcut olduğunda (lock_guard, unique_ptr, fstream) onu tercih edin. Genel kapsam koruyucusunu yalnızca doğal bir sarmalayıcısı olmayan, özel amaçlı temizleme işlemlerinde kullanın.

Hızlı Kontrol

Kapsam koruyucuları konusundaki anlayışınızı sınayın.

Özet

Bir kapsam koruyucusunun, RAII aracılığıyla kapsamdan çıkışta temizlemeyi otomatik olarak çalıştırdığını öğrendiniz. Erken dönüşleri ve istisnaları yönetir, dismiss() ile geri almayı destekler ve yalnızca taşınabilir olmalıdır. Özel RAII türleri mevcut olduğunda onları tercih edin.

Sıkça Sorulan Sorular

“Kapsam Koruyucuları” dersi ücretsiz mi?

Evet — “Kapsam Koruyucuları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Kapsam Koruyucuları” dersinde ne öğreneceğim?

Kapsamdan çıkarken temizleme işlemi çalıştırın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Kapsam Koruyucuları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. RAII İlkesi
  2. Yıkıcılar ve Temizleme
  3. Üçlü/Beşli Kural
  4. Kapsam Koruyucuları
← C++ Academy Sayfasına Dön