Nutikatel osutitel on tavaliste osutitega võrreldes lisaeeliseid. Siin on kõik, mida pead teadma Rusti nutikate osutite kohta.

Mäluhaldus on üks Rusti müügiargumente, eriti kuna turvalisust ei ohustata. Rusti omandisüsteem võimaldab kompilaatoril garanteerida koodi ohutuse ja vaba mälu vigadest, nagu rippuvad osutid ja mälulekked.

Rust pakub ka nutikaid viiteid koos täiendavate metaandmete ja võimalustega lisaks traditsioonilistele osutitele. Nutikad näpunäited on mälulekke vastu võitlemiseks käepärased.

Mis on arukad osutid roostes?

Nutikad näpunäited on üks Rooste andmetüübid mis laiendab tavaliste osutite võimalusi, pakkudes lisafunktsioone, nagu ülekoormatud operaatorid, hävitajad ja automaatne mäluhaldus.

Rust kasutab nutikate viitade täitmiseks struktuure; seega on nutikatel osutitel ka omandivõimalused.

Kui seote dünaamiliselt jaotatud andmeid sisaldava mälu nutikate osutitega, eraldatakse need automaatselt. Nutikad osutid pakuvad funktsioone juhtimiseks Rooste objekti eluiga, muutes need mugavaks muudes madala taseme keeltes, näiteks C ja C++, populaarsete vigade (nt nullkursori viitamise ja mälulekke) ärahoidmiseks.

Nutikate osutite kasutamise eelised

Siin on mõned nutikate osutite kasutamise eelised.

  1. Automaatne mäluhaldus: Nutikad osutid pakuvad automaatset mäluhaldust, sealhulgas eraldamist ja eraldamist, erinevalt tavaliste osutitega käsitsi mäluhaldusest.
  2. Parem ohutus: nutikad osutid jõustavad omandiõiguse semantika, tagades, et ressurssidele pääseb korraga juurde ainult üks omanik, vältides andmejälgi ja samaaegsusega seotud vigu.
  3. Paindlikkus: Rust pakub mitmeid nutikaid viiteid, millest igaühel on oma komplekt omandi semantika turvalise koodi paindlikuks kirjutamiseks.
  4. Ressursihaldus: saate kasutada nutikaid viiteid muude ressursside, näiteks failitöötlejate ja võrgupistikute haldamiseks, kapseldades ressursse nutikas kursoris, mis hõlbustab nende elutsükli haldamist ja tagab, et need on õigesti suletud ja pärast vabastatud kasutada.
  5. Parem jõudlus: Nutikad osutid aitavad parandada jõudlust, vähendades mälu kopeerimist ja eraldamist – nutikate osutite kasutamisest tulenev väiksem mälumaht suurendab jõudlust.

Nutikad osutid sobivad keskmise ja suurte rakenduste jaoks, eriti juhtudel, kui mäluhaldus on kriitiline.

Nutikate osutite tüübid

Rust pakub mitut tüüpi nutikaid viiteid, sealhulgas Kast, Rc, RefCellja Mutex.

1. Box Smart Pointer

The Kast Smart Pointer on Rusti kõige lihtsam ja levinum nutikursor. The Kast nutikas kursor aitab eraldada kuhja väärtusi ja loob juurdepääsetavuse jaoks kastiga kursori.

The Kast Smart Pointer on mugav dünaamilise mälu jaotamiseks, kui peate tagama, et mälu eraldatakse automaatselt, kui osutid on väljaspool rakendust.

Siin on, kuidas saate deklareerida ja kasutada a Kast osuti:

fnpeamine(){

// kasti nutika kursori uus eksemplar
lase x = Kast::uus(5);
println!(x)

}

The Kast tüüp on osa Rusti eelmängust, nii et erinevalt teistest nutikatest osutitest ei pea te tüüpi importima.

The x muutuja on a Kast kursor, mis osutab 5 täisarvu väärtusele. Rust eraldab kuhja väärtuse jaoks mälu ja vabastab selle automaatselt, kui muutuja ulatub väljapoole.

2. Rc Smart Pointer

The Rc (Reference Counted) nutikas kursor pakub funktsioone jagatud omandi väärtuste loomiseks. The Rc nutikad viited jälgivad väärtusele viidete arvu ja eraldavad väärtuse, kui viimane viide on väljaspool rakendust.

The Rc nutikas kursor on mugav, kui teil on vaja jagada väärtust, mis võimaldab juurdepääsu oma programmi mitmes osas.

Et kuulutada an Rc nutikas osuti, impordite Rc struct standardteegist, deklareerige uus Rc osuti uus funktsioon ja kloonige kursori muutuja käsuga kloon muutuv.

kasutada std:: rc:: Rc;

fnpeamine() {

// RC nutika kursori uus eksemplar
lase x = Rc:: new(5);
lase y = Rc:: kloon(&x);

println!("x = {}, y = {}", x, y);
}

The x muutuja on Rc osuti muutuja ja y muutuja on kloon, millel on juurdepääs mälus olevale väärtusele. Võrdlusarv on kaks ja väärtus eemaldatakse mälust, kui muutujad on väljaspool ulatust.

3. RefCelli nutikas osuti

The RefCell nutikas pointer pakub sisemist muutuvust, mis võimaldab muutumatutel ja muutuvatel viidetel koos eksisteerida seni, kuni teatud aja kohta on üks muutuv viide.

The RefCell nutikas osuti on mugav muudetavatele viidetele kuuluvate väärtuste muteerimiseks.

The Refcell funktsioon ei ole osa Rusti eelmängust, seega peate nutika kursori kasutamiseks importima struktuuri standardsest teegist.

kasutada std:: lahter:: RefCell;

fnpeamine(){

// Refcelli nutika kursori uus eksemplar
lase x = RefCell:: new(5);

lase y = x.laena();
lase z = x.laena_mut();

println!("y = {}", *y);
println!("z = {}", *z);

}

The Refcell nutikas kursor sisaldab väärtust ja y muutuja on muutumatu viide väärtusele. The laena_mut funktsioon loob väärtusele muutuva viite.

Programm on ohutu, kui korraga on ainult üks muutuv viide.

4. Mutexi nutikas osuti

The Mutex nutikas osuti pakub vastastikuseid välistusi. The Mutex Smart Pointer on mugav, et sünkroonida samaaegsetes programmides mitme lõime kaudu juurdepääsu väärtustele.

The Mutex nutikas pointer pakub vastastikust välistamist, et tagada ainult ühe lõime juurdepääs väärtusele, vältides samal ajal andmete jälgimist.

Peate importima Mutex struktureerida ja luua uus eksemplar uus funktsiooni kasutada Mutex Nutikas pointer roostes.

kasutada std:: sync:: Mutex;

fnpeamine() {

// Mutexi osuti uus eksemplar
lase loendur = Mutex:: new(0);

{
lasemut num = counter.lock().unwrap();
*number += 1;
}

println!("Tulemus: {}", *counter.lock().unwrap());
}

The loendur muutuja on uus Mutex näiteks. The peamine funktsioon lukustab mutexi funktsiooniga lukk meetod Mutex näiteks. Lukk võimaldab enne luku vabastamist ja väärtuse printimist loenduri väärtust ohutult muuta.

The Mutex tüüp garanteerib, et jagatud ressurssidele pääseb juurde ainult üks lõim (antud juhul loendur muutuja) ja muutke selle väärtust korraga. Vastastikune välistamine tagab samaaegse juurdepääsu jagatud ressurssidele jada, et vältida andmete jälgimist ja muid samaaegsusprobleeme.

Rusti omanikumudel tagab mälu ohutuse

Nutikad osutid on üks Rusti lähenemisviise mälu ohutusele ja paindlikkusele. Rusti omandimudel tagab, et programmid kasutavad kompileerimise ajal koos laenukontrollijaga mälu ohutult.

Laenukontroll on Rusti omandimudeli oluline funktsioon, mis jõustab ranged reeglid mälu juurdepääsetavuse ja muutmise kohta.