Dangling referans
- C++ kursu
- Başlangıç
- Ders 75/116
- 5 dk
Dangling referans kavramını ve güvenliği öğrenirsin.
Dangling referans
Bir referans, bağlandığı değişken ömrünü doldurduğunda geçersiz hale gelir; buna dangling referans denir. Örneğin bir fonksiyon içindeki yerel değişkene referans döndürürsen, fonksiyon çıkışında değişken yok olur ve referans havada kalır.
Dangling referans kullanmak tanımsız davranıştır; program çökebilir, yanlış sonuç verebilir veya görünüşte çalışabilir. Bu yüzden referans döndüren fonksiyonlar yazarken hedefin çağıran taraftan daha uzun yaşadığından emin olmalısın.
Güvenli kullanım
Dangling referansı önlemek için iki basit ilkeyi izle. Birincisi: yerel değişkene referans döndürme. İkincisi: referansın hedefi, referansttan daha uzun yaşamalı.
Bu dersin ödevinde, güvenli bir referans kullanımı olan increment(int& n) fonksiyonunu yazacaksın. Çağıran taraftaki x, fonksiyon çağrısından önce de sonra da yaşar; bu yüzden referans güvenlidir. Referans parametreleri bu açıdan güvenlidir.
Uygulama increment fonksiyonu
void increment(int& n) fonksiyonunu tanımla; gövdede n += 1; yaz. main içinde int x = 10; tanımla, increment(x) çağır, x'i std::cout ile yazdır.
Başlangıç kodu
#include <iostream>
// increment fonksiyonunu tanımla
int main() {
// x değişkenini tanımla
// increment çağrısı ekle
// x'i yazdır
return 0;
}Örnek çözüm
#include <iostream>
void increment(int& n) {
n += 1;
}
int main() {
int x = 10;
increment(x);
std::cout << x << "\n";
return 0;
}Beklenen çıktı
11
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Dangling referans nedir?
- Başlatılmamış referans
- Const olmayan referans
- İşaretçi olmayan referans
- Ömrü dolan değişkene referans Doğru cevap
Açıklama: Dangling referans, ömrü dolan değişkene bağlı referanstır.
2 İfadeyi anlamına eşle
| Kavram | Anlamı |
|---|---|
int& n |
Referans parametre |
Yerel değişken |
Referans verme |
const int& |
Güvenli geçiş |
n += 1 |
Artırma |
3 increment gövdesi
void increment(int& n) { ____ = n + 1; }
void increment(int& n) { n = n + 1; }
Açıklama: n = n + 1; n'yi bir artırır.