Sobes.tech
Junior

Ինչու՞ օգտագործել հղումը ավելի անվտանգ է փոփոխություններից պաշտպանվելու համար, քան ցուցիչը։

sobes.tech AI

Պատասխան AI-ից

Հղումը միշտ պետք է հղվի առկա օբյեկտի և չի կարող լինել nullptr։ Ցկանցողը կարող է լինել nullptr կամ հղում անի անվավեր հիշողությանը։ Երբ dereference է կատարվում nullptr կամ անվավեր ցկանցողով, առաջանում է անորոշ վարք (հաճախ հիշողության սեգմենտացիա), որը ավելի դժվար է հայտնաբերել։ Հղումը երաշխավորում է, որ աշխատում եք վավեր օբյեկտի հետ։

// Ցկանցողի օգտագործում
int* ptr = nullptr;
// Փորձը dereference անել կարող է հանգեցնել սխալի
// *ptr = 10; 

// Հղման օգտագործում
int value = 5;
int& ref = value; // Հղումը սկսվում է առկա օբյեկտով
// *ref = 10; // Սխալ սինտաքս - ref արդեն `value`-ի հոմանիշն է
ref = 10; // Փոխում է `value`-ը հղման միջոցով - անվտանգ

// Հղումը չի կարող լինել `nullptr`
// int& invalid_ref = nullptr; // Կոմպիլյատորային սխալ

Հղումը պետք է սկզբում լինի հայտարարության ժամանակ, հղում անելով կոնկրետ օբյեկտին, և չի կարող փոխվել այլ օբյեկտի վրա։ Ցկանցողը կարող է փոխվել՝ ցույց տալով տարբեր օբյեկտների կամ nullptr-ի վրա։

// Ցկանցողի օգտագործում
int a = 1;
int b = 2;
int* ptr = &a; // Ցկանցող a-ի վրա
ptr = &b;    // Այժմ ցկանցողը ցույց է տալիս b-ին

Անվտանգության տեսանկյունից հիմնական տարբերությունները՝

Հնարավորություն Հղում Ցկանցող
Բոլոր nullptr-ներ Ոչ Այո
Փոխառնել Ոչ Այո
nullptr-ի dereference Անհնարին Անորոշ վարք
Օգտագործել առանց սկզբնական արժեքի Անհնարին (կոմպիլյատորային սխալ) Մինչև dereference-ը՝ հնարավոր (անորոշ վարք)