CodeBlanks Logo Icon CodeBlanks

Özet - İleri hata yönetimi

exception safety, RAII ve std::expected'i birleştirerek bir güvenli sınıf yazarsın.

Özet - İleri hata yönetimi

Bu grupta exception hierarchy, exception safety, RAII, std::expected ve noexcept'i öğrendin.

İstisnalar std::exception hiyerarşisinde düzenlenir; safety garantileri (basic, strong, nothrow) sağlam kodun temelidir; RAII kaynakları nesnelere bağlar; std::expected hatayı değer olarak döndürür; noexcept sözleşmesi fırlatmama garantisini verir. Şimdi bu kavramları birleştiren bir SafeStack sınıfı yazacaksın: RAII ile veriyi yönetecek, pop std::expected döndürecek ve empty noexcept olacak.

Uygulama SafeStack sınıfı yaz

SafeStack sınıfını yaz: std::vector<int> data_ üyesi olsun; void push(int v) ekleme yapsın; std::expected<int, std::string> pop() boşsa std::unexpected(std::string("boş yığın")) döndürsün, değilse değeri versin; bool empty() const noexcept data_.empty() döndürsün. main içinde s.push(42), auto r = s.pop() ve r.has_value() ise r.value()'u yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <vector>
#include <expected>
#include <string>

// SafeStack sınıfını yaz: push, pop (expected), empty (noexcept)

int main() {
    // yığın oluştur, değer ekle, çıkar ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <vector>
#include <expected>
#include <string>

class SafeStack {
    std::vector<int> data_;
public:
    void push(int v) { data_.push_back(v); }
    std::expected<int, std::string> pop() {
        if (data_.empty()) return std::unexpected(std::string("boş yığın"));
        int v = data_.back();
        data_.pop_back();
        return v;
    }
    bool empty() const noexcept { return data_.empty(); }
};

int main() {
    SafeStack s;
    s.push(42);
    auto r = s.pop();
    if (r.has_value()) std::cout << r.value();
    return 0;
}

Beklenen çıktı

42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 SafeStack pop çağrısı

Soru
auto r = s.____();
Cevap
auto r = s.pop();

Açıklama: s.pop() std::expected döndürür.

2 Kavramı açıklamasıyla eşle

Kavram Anlamı
hierarchy İstisna ağacı
safety Garanti düzeyi
RAII Kaynak nesneye bağlı
expected Hata değer olarak

3 Hangi kavram hatayı istisna yerine değer olarak döndürür?

  • RAII
  • std::expected Doğru cevap
  • noexcept
  • hierarchy

Açıklama: std::expected, hatayı dönüş değeri olarak verir.

İleri seviye bölümündeki tüm dersler