Junior
Неге шилтемени колдонуу көрсөткүчкө караганда өзгөртүүлөрдөн коргоо үчүн коопсузураак?
sobes.tech AI
AIден жооп
Референс ар дайым бар болгон объектке шилтеме болушу керек жана nullptr болбойт. Жолдоочу көрсөткүч nullptr болушу мүмкүн же жараксыз эс тутумга шилтеме жасашы мүмкүн. nullptr же жараксыз көрсөткүчтү dereference кылганда, анык эмес жүрүм-турум пайда болот (көбүнчө бөлүнүү ката), аны аныктоо кыйын. Референс иштөөдө жарактуу объект менен иштөөңүздү кепилдейт.
// Көрсөткүчтү колдонуу
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) |