Rust Inteligentne wskaźniki

Rust Inteligentne wskaźniki
Wskaźniki nie są dla żadnego programistę. Są funkcją, która pozwala używać zmiennych do przechowywania adresu w pamięci. Adres następnie „wskazuje”, stąd wskaźnik, do danych przechowywanych w tej lokalizacji.

Inteligentne wskaźniki to wskaźniki o rozszerzonych możliwościach, takie jak oprawione kontrole i automatyczne zarządzanie pamięcią. Inteligentne wskazówki obejmują również dodatkowe metadane. Teraz koncepcja inteligentnych wskazówek nie jest nowa, szczególnie dla programistów C ++.

W tym artykule zbadamy różne inteligentne wskaźniki zgodnie z definicją w bibliotece Standard Rust Standard.

Kluczowe punkty

W rdzawie inteligentne wskaźniki są strukturami danych, w przeciwieństwie do normalnych wskazówek, inteligentne wskaźniki mogą faktycznie posiadać dane. Są one powszechnie wdrażane przy użyciu struktur, ale różnią się od normalnych struktur w tym sensie, że wdrażają cechy deref i upuszcza.

W rdzy jest 5 inteligentnych wskazówek:

  1. Skrzynka
  2. Deref
  3. Upuszczać
  4. RC
  5. Refcell

NOTATKA: W rdzy odnosi się do typu danych.

Pamiętaj, że nie obejmie wszystkich inteligentnych wskazówek w tym artykule.

Skrzynka

Smart Wskaźnik Box zapewnia sposób odniesienia danych przechowywanych w pamięci sterty. Domyślnie Rust przydziela wszystko na pamięci stosu. Korzystając z boksowego wskaźnika, możemy uzyskać dostęp do danych na stosie, nie ponosząc kosztów wydajności.

Smart Wskaźnik Box jest również zgodny z zasadami własności i pożyczania. Stąd ma jednego właściciela danych i może mieć tylko jedno zmienne referencje i dowolną liczbę niezmiennych referencji.

fn main ()
// Skrzynka
Let var = Box :: New (100);
println!(„Wartość: ”, var)

W powyższym przykładzie mamy boksowy wskaźnik, który przechowuje wartość 5 w sterce. Pamiętaj, że samo pudełko jest przechowywane w stosie.

Po zakończeniu programu pudełko jest rozdzielone z pamięci.

Deref

Jak sama nazwa wskazuje, inteligentny wskaźnik deref jest używany, aby umożliwić manipulację operacją dereferencyjną. Korzystając z inteligentnego wskaźnika DeREF, możesz utworzyć strukturę, która może działać zarówno z inteligentnym wskaźnikiem, jak i referencjami.

Przykładowy kod jest pokazany poniżej:

Użyj std :: ops :: deref;
struct Custbox
Dane: t,

Impl Deref dla Custbox
// Param typu ogólnego
Typ Target = t;
fn deref (& self) -> & t
&samego siebie.dane


fn main ()
niech x = custbox data: 100;
println!(„Wartość: ”,*(x.deref ()))

Upuszczać

Wskaźnik upuszczania Smart jest używany do uwolnienia pamięci, która jest przydzielona w stercie. Cecha upuszcza w rogach obsługuje pamięć, gdy zmienna wychodzi z zakresu. Nie musimy nazywać tej cechy ręcznie, ponieważ rdza zrobi to za nas. Możemy jednak zaimplementować to dla typów niestandardowych, jak pokazano.

struct myStruct
X: i32,

Imp Drop dla MyStruct
FN Drop (& mut self)
println!(„Upuszczanie: ”, jaźń.X)


fn main ()
niech _x = myStruct x: 100;
niech _y = myStruct x: 200;

Powyższe wdraża cechę upuszczania cechy niestandardowej. Wyjście jest tak, jak pokazano:

Zrzucanie: 200

Zrzucanie: 100

Wniosek

W tym artykule omawiamy, jak tworzyć i pracować ze wspólnymi inteligentnymi wskaźnikami w języku programowania rdzy. Możesz dowiedzieć się więcej o Rust Smart wskaźniki w poniższym zasadzie:

https: // doc.Rust-Lang.Org/Book/CH15-00-SMART-PINTERS.html