Junior
Niyə bağlantı istifadə etmək göstəriciyə nisbətən dəyişikliklərdən qorunmaq üçün daha təhlükəsizdir?
sobes.tech Süni İntellekt
AI-dan cavab
İstinad həmişə mövcud bir obyekti göstərməlidir və nullptr ola bilməz. Göstərici nullptr ola bilər və ya etibarsız yaddaşa işarə edə bilər. nullptr və ya etibarsız göstəricinin dereferensiyası qeyri-müəyyən davranışa səbəb olur (tez-tez yaddaşın bölünməsi), bu isə aşkarlanması daha çətindir. İstinad, etibarlı bir obyektlə işlədiyinizə zəmanət verir.
// Göstəricidən istifadə
int* ptr = nullptr;
// Dereferensiya cəhdləri uğursuz ola bilər
// *ptr = 10;
// İstinaddan istifadə
int value = 5;
int& ref = value; // İstinad mövcud bir obyektlə başlatılır
// *ref = 10; // Yanlış sintaks - ref artıq value-nin aliasidir
ref = 10; // İstinad vasitəsilə value-ni dəyişir - təhlükəsiz
// İstinad `nullptr` ola bilməz
// int& invalid_ref = nullptr; // Tərtibçi xətası
İstinad, elan zamanı müəyyən bir obyektə işarə etməlidir və başqa obyektə yönəldilə bilməz. Göstərici isə, müxtəlif obyektlərə və ya nullptr-a işarə etmək üçün dəyişdirilə bilər.
// Göstəricidən istifadə
int a = 1;
int b = 2;
int* ptr = &a; // a-ya göstərici
ptr = &b; // İndi göstərici b-yə işarə edir
Təhlükəsizlik baxımından əsas fərqlər:
| İmkan | İstinad | Göstərici |
|---|---|---|
nullptr ola bilərmi? |
Yox | Bəli |
| Yenidən təyin edilə bilərmi? | Yox | Bəli |
nullptr-ın dereferensiyası |
Mümkün deyil | Qeyri-müəyyən davranış |
| İstifadə olmadan əvvəl başlatmaq | Mümkün deyil (tərtibçi xətası) | Mümkün (qeyri-müəyyən davranış ilə dereferensiya) |