Junior
Miks lingi kasutamine on turvalisem muutuste eest kaitsmiseks võrreldes näidikuga?
sobes.tech AI
Vastus AI-lt
Lingid peab alati viitama olemasolevale objektile ja ei saa olla nullptr. Näidik võib olla nullptr või viidata ebavajalikule mälule. nullptr-i või ebavajaliku näidiku dereferentimisel tekib määratlemata käitumine (tihti mälu segmentatsioon), mida on raskem avastada. Lingid tagavad, et te töötate kehtiva objektiga.
// Näidiku kasutamine
int* ptr = nullptr;
// Dereferentimine võib põhjustada vea
// *ptr = 10;
// Lingiga kasutamine
int value = 5;
int& ref = value; // Lingi initsialiseeritakse olemasoleva objektiga
// *ref = 10; // Vale süntaks - ref on juba alias väärtusele
ref = 10; // Muudab väärtust läbi lingi - ohutu
// Lingil ei saa olla `nullptr`
// int& invalid_ref = nullptr; // Kompilatsiooniviga
Lingi tuleb initsialiseerida deklaratsiooni ajal, näidates konkreetsele objektile ning seda ei saa ümber määrata teisele objektile. Näidik võib muutuda, et näidata erinevaid objekte või nullptr.
// Näidiku kasutamine
int a = 1;
int b = 2;
int* ptr = &a; // Näidik a-le
ptr = &b; // Näidik nüüd b-le
Põhilised erinevused turvalisuse kontekstis:
| Võimalus | Lingi | Näidik |
|---|---|---|
Ole nullptr |
Ei | Jah |
| Uuesti määrata | Ei | Jah |
Dereferentimine nullptr |
Ei | Määratlemata käitumine |
| Kasutada ilma initsialiseerimiseta | Ei (kompilatsiooniviga) | Võimalik (mälu määratlemata käitumine dereferentimisel) |