Pointerii inteligenți folosesc adesea cod nesigur. După cum am menționat și mai devreme, aceștia sunt des folosiți în Rust pentru interacțiunea cu memoria la un nivel apropiat de hardware.
Ce este codul nesigur? Codul nesigur se comportă exact ca orice cod scris în Rust cu excepția câtorva aspecte al căror comportament
nu poate fi garantat de către compilatorul din Rust.
O trăsătură de bază a codului nesigur este dereferențierea unui pointer simplu. Asta înseamnă că poate lua un pointer simplu
și să îl ducă la o locație din memorie, declarând "aici există o structură de date!" și transformând-o într-o reprezentare de date pe care o poți folosi (adică transformă *const u8
în u8
).
Limbajul Rust nu poate urmări fiecare byte ce este scris în memorie. Pentru că limbajul Rust nu poate garanta
ce se află la un număr aleator folosit drept pointer simplu, acesta folosește dereferențierea într-un bloc unsafe { ... }
.
Pointerii inteligenți dereferențiază pointerii simpli pe larg, dar este bine știut ce fac.