CodeBlanks Logo Icon CodeBlanks

Destructor

Destructor ile nesne temizliğini öğrenirsin.

Destructor

Bir destructor (yıkıcı), nesne yok edilirken otomatik çağrılan üye fonksiyondur. Sınıf adının önüne tilde (~) konur, parametre ve dönüş türü yoktur. Amacı, nesnenin tuttuğu kaynakları serbest bırakmaktır.

Örnek: class Logger { public: ~Logger() { std::cout << "Kapat"; } };. Bir Logger log; değişkeni kapsamdan çıkınca (örneğin main biterken) ~Logger otomatik çağrılır ve ekrana "Kapat" yazar. Her sınıfın en fazla bir destructor'ı olur ve parametre almaz.

Kapsamdan çıkış

Yığın (stack) üzerindeki bir nesne, tanımlandığı blok sona erince otomatik yok edilir ve destructor çalışır. Bu, RAII (Resource Acquisition Is Initialization) denen tekniğin temelidir: kaynağın yaşam süresi nesnenin yaşam süresine bağlıdır.

Örnek: bir fonksiyon içinde Logger log; tanımlarsan, fonksiyon dönüşünde ~Logger çağrılır. Açılan dosyalar, ayrılan bellek ya da kurulan bağlantılar destructor içinde kapatılırsa, programcı unutsa bile kaynak sızmaz. Bu yüzden modern C++ new yerine yığın ayırmasını ve akıllı işaretçileri (smart pointer) önerir.

Uygulama Logger sınıfına destructor ekle

Logger sınıfını tanımla. public: altına Logger() { std::cout << "Aç"; ile başlayan yapıcı metot ve ~Logger() { std::cout << "Kapat"; } destructor'ını ekle. main içinde Logger log; örneği oluştur; program biterken destructor otomatik çağrılır.

Başlangıç kodu

main.cpp
#include <iostream>

// Logger sınıfını tanımla

int main() {
    // Logger örneği oluştur
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

class Logger {
public:
    Logger() {
        std::cout << "Aç";
    }
    ~Logger() {
        std::cout << "Kapat";
    }
};

int main() {
    Logger log;
    return 0;
}

Beklenen çıktı

AçKapat

Soru ve cevaplar

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

1 Özelliği anlamına eşle

Kavram Anlamı
~Logger() Destructor imzası
Nesne kapsamdan çıkınca Çağrılma anı
Parametre almaz Destructor kuralı
Kaynak serbest bırakma Destructor amacı

2 Bir destructor kaç parametre alır?

main.cpp
~Logger() { }
  • İstediğin kadar
  • En az bir
  • Sıfır, parametre almaz Doğru cevap
  • Yalnızca int

Açıklama: Destructor hiçbir parametre almaz.

3 Destructor imzasını tamamla

Soru
class Logger { public: ____Logger() { std::cout << "Kapat"; } };
Cevap
class Logger { public: ~Logger() { std::cout << "Kapat"; } };

Açıklama: Tilde işareti destructor'ı belirtir: ~Logger().

Orta seviye bölümündeki tüm dersler