Junior
Чаро истифодаи пайванд бехатартар аст барои муҳофизат аз тағирот дар муқоиса бо ишора?
sobes.tech AI
Ҷавоб аз AI
Референс бояд ҳамеша ба объекте мавҷуд ва наметавонад nullptr бошад. Ҳамчун ишорагардонкунанда метавонад nullptr бошад ё ба ёдгории нодуруст ишора кунад. Дереференс кардани nullptr ё ишорагардонандаи нодуруст ба рафтори номуайян (бештар ба хатоии сегментация) оварда мерасонад, ки душвортар аст ошкор кардан. Референс кафолат медиҳад, ки бо объекти эътиборнок кор мекунед.
// Истифодаи ишорагардонкунанда
int* ptr = nullptr;
// кӯшиши дереференс кардан метавонад бо хато анҷом ёбад
// *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 |
Имконнопазир | Номуайян рафтор |
| Бе оғоз кардан истифода бурдан | Имконнопазир (хати компилятор) | Мумкин (ба номуайян рафтор дар дереференс) |