Destructor
- C++ kursu
- Orta seviye
- Ders 11/116
- 5 dk
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
#include <iostream>
// Logger sınıfını tanımla
int main() {
// Logger örneği oluştur
return 0;
}Örnek çözüm
#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?
~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
class Logger { public: ____Logger() { std::cout << "Kapat"; } };
class Logger { public: ~Logger() { std::cout << "Kapat"; } };
Açıklama: Tilde işareti destructor'ı belirtir: ~Logger().