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:
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 ()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;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 myStructPowyż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