Özet - İleri hata yönetimi
- C++ kursu
- İleri seviye
- Ders 78/83
- 5 dk
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
#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
#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ı
auto r = s.____();
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.