Intelligente Zeiger haben gegenüber normalen Zeigern zusätzliche Vorteile. Hier finden Sie alles, was Sie über Smart Pointer in Rust wissen müssen.

Die Speicherverwaltung ist eines der Verkaufsargumente von Rust, insbesondere da die Sicherheit nicht beeinträchtigt wird. Das Eigentumssystem von Rust ermöglicht es dem Compiler, Codesicherheit und Freiheit von Speicherfehlern wie baumelnden Zeigern und Speicherlecks zu gewährleisten.

Rust bietet Smart Pointern außerdem zusätzliche Metadaten und Funktionen, die über herkömmliche Pointer hinausgehen. Intelligente Zeiger sind praktisch, um Speicherlecks zu beheben.

Was sind Smart Pointer in Rust?

Intelligente Zeiger sind einer davon Rusts Datentypen Dies erweitert die Fähigkeiten regulärer Zeiger, indem es zusätzliche Funktionen wie überladene Operatoren, Destruktoren und automatische Speicherverwaltung bietet.

Rust verwendet Strukturen, um intelligente Zeiger auszuführen; Daher verfügen Smart Pointer auch über Eigentumsfunktionen.

Wenn Sie Speicher, der dynamisch zugewiesene Daten enthält, mit intelligenten Zeigern verknüpfen, wird die Zuordnung automatisch aufgehoben. Intelligente Zeiger bieten Funktionen zur Steuerung des

instagram viewer
Rusts ObjektlebensdauerDies macht sie praktisch, um Fehler wie die Dereferenzierung von Nullzeigern und Speicherlecks zu verhindern, die in anderen Low-Level-Sprachen wie C und C++ häufig vorkommen.

Vorteile der Verwendung von Smart Pointern

Hier sind einige Vorteile der Verwendung intelligenter Zeiger:

  1. Automatische Speicherverwaltung: Intelligente Zeiger bieten im Gegensatz zur manuellen Speicherverwaltung mit regulären Zeigern eine automatische Speicherverwaltung, einschließlich Zuweisung und Freigabe.
  2. Verbesserte Sicherheit: Intelligente Zeiger erzwingen die Eigentumssemantik und stellen sicher, dass jeweils nur ein Eigentümer auf Ressourcen zugreifen kann, wodurch Datenspuren und Fehler im Zusammenhang mit der Parallelität vermieden werden.
  3. Flexibilität: Rust bietet mehrere intelligente Zeiger, jeder mit seinem eigenen Satz Eigentumssemantik zum flexiblen Schreiben von sicherem Code.
  4. Resourcenmanagement: Sie können intelligente Zeiger verwenden, um andere Ressourcen wie Dateihandler und Netzwerk-Sockets zu verwalten, indem Sie die Ressourcen kapseln innerhalb eines intelligenten Zeigers, der es einfacher macht, ihren Lebenszyklus zu verwalten und sicherzustellen, dass sie korrekt geschlossen und anschließend freigegeben werden verwenden.
  5. Verbesserte Leistung: Intelligente Zeiger tragen zur Verbesserung der Leistung bei, indem sie das Kopieren und Zuweisen von Speicher reduzieren. Der geringere Speicherbedarf durch die Verwendung intelligenter Zeiger führt zu einer höheren Leistung.

Intelligente Zeiger eignen sich für mittlere bis große Anwendungen, insbesondere in Fällen, in denen die Speicherverwaltung von entscheidender Bedeutung ist.

Arten von Smart Pointern

Rust bietet mehrere Arten von Smart Pointern, darunter Kasten, Rc, RefCell, Und Mutex.

1. Der Box Smart Pointer

Der Kasten Smart Pointer ist der einfachste und gebräuchlichste Smart Pointer von Rust. Der Kasten Der intelligente Zeiger hilft bei der Zuweisung von Werten auf dem Heap und erstellt einen Box-Zeiger für den Zugriff.

Der Kasten Smart Pointer ist praktisch für die dynamische Speicherzuweisung, wenn Sie sicherstellen müssen, dass der Speicher automatisch freigegeben wird, wenn die Zeiger außerhalb des Gültigkeitsbereichs liegen.

So können Sie a deklarieren und verwenden Kasten Zeiger:

fnhauptsächlich(){

// neue Instanz des Box-Smartpointers
lassen x = Kasten::neu(5);
println!(X)

}

Der Kasten type ist Teil von Rusts Vorspiel, sodass Sie den Typ im Gegensatz zu anderen intelligenten Zeigern nicht importieren müssen.

Der X Variable ist a Kasten Zeiger, der auf den ganzzahligen Wert 5 zeigt. Rust reserviert den Speicher für den Wert auf dem Heap und gibt ihn automatisch frei, wenn die Variable außerhalb des Gültigkeitsbereichs liegt.

2. Der Rc Smart Pointer

Der Rc Der Smart Pointer (Referenz gezählt) bietet Funktionen zum Erstellen von Werten mit gemeinsamem Eigentum. Der Rc Intelligente Zeiger verfolgen die Anzahl der Verweise auf einen Wert und geben die Zuordnung des Werts frei, wenn der letzte Verweis außerhalb des Gültigkeitsbereichs liegt.

Der Rc Smart Pointer ist praktisch, wenn Sie den Besitz eines Werts für die Barrierefreiheit in mehreren Teilen Ihres Programms teilen müssen.

Um eine zu erklären Rc Smart Pointer, Sie importieren die Rc Struktur aus der Standardbibliothek, deklarieren Sie eine neue Rc Zeiger mit dem neu Funktion und klonen Sie die Zeigervariable mit der Klon Variable.

verwenden std:: rc:: Rc;

fnhauptsächlich() {

// neue Instanz des RC-Smartpointers
lassen x = Rc:: neu(5);
lassen y = Rc:: clone(&x);

println!(„x = {}, y = {}“, x, y);
}

Der X Variable ist die Rc Zeigervariable und die j Variable ist ein Klon mit Zugriff auf den Wert im Speicher. Der Referenzzähler beträgt zwei und der Wert wird aus dem Speicher freigegeben, wenn die Variablen außerhalb des Gültigkeitsbereichs liegen.

3. Der RefCell Smart Pointer

Der RefCell Smart Pointer bietet innere Veränderlichkeit, die die Koexistenz unveränderlicher und veränderlicher Referenzen ermöglicht, solange es pro gegebener Zeit eine veränderbare Referenz gibt.

Der RefCell Der intelligente Zeiger ist praktisch, wenn Werte geändert werden, die veränderlichen Referenzen gehören.

Der Referenzzelle Die Funktion ist nicht Teil von Rusts Vorspiel, daher müssen Sie die Struktur aus der Standardbibliothek importieren, um den Smart Pointer verwenden zu können.

verwenden std:: cell:: RefCell;

fnhauptsächlich(){

// neue Instanz des Refcell-Smartpointers
lassen x = RefCell:: new(5);

lassen y = x.borrow();
lassen z = x.borrow_mut();

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

}

Der Referenzzelle Der intelligente Zeiger enthält den Wert und den j Variable ist die unveränderliche Referenz auf den Wert. Der leihen_mut Die Funktion erstellt eine veränderliche Referenz des Werts.

Das Programm ist sicher, wenn jeweils nur eine veränderbare Referenz vorhanden ist.

4. Der Mutex Smart Pointer

Der Mutex Smart Pointer bietet gegenseitige Ausschlüsse. Der Mutex Smart Pointer ist praktisch, um den Zugriff auf Werte über mehrere Threads in gleichzeitigen Programmen zu synchronisieren.

Der Mutex Smart Pointer bietet gegenseitigen Ausschluss, um sicherzustellen, dass nur ein Thread auf den Wert zugreifen kann, und verhindert gleichzeitig Datenspuren.

Sie müssen die importieren Mutex struct und erstelle eine neue Instanz mit dem neu welche Funktion verwendet werden soll Mutex Smart Pointer in Rust.

verwenden std:: sync:: Mutex;

fnhauptsächlich() {

// neue Instanz des Mutex-Zeigers
lassen counter = Mutex:: new(0);

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

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

Der Schalter Variable ist das Neue Mutex Beispiel. Der hauptsächlich Die Funktion erhält eine Sperre für den Mutex mit dem sperren Methode der Mutex Beispiel. Die Sperre ermöglicht eine sichere Änderung des Zählerwerts, bevor die Sperre aufgehoben und der Wert gedruckt wird.

Der Mutex Der Typ garantiert, dass nur ein Thread auf die gemeinsam genutzten Ressourcen zugreifen kann (in diesem Fall die Schalter Variable) und ändern Sie jeweils ihren Wert. Durch den gegenseitigen Ausschluss wird sichergestellt, dass der gleichzeitige Zugriff auf gemeinsam genutzte Ressourcen serialisiert wird, um Datenspuren und andere Probleme mit der Parallelität zu verhindern.

Das Eigentumsmodell von Rust garantiert Speichersicherheit

Intelligente Zeiger sind einer von Rusts Ansätzen zur Speichersicherheit und -flexibilität. Das Eigentumsmodell von Rust stellt mit dem Borrow-Checker zur Kompilierungszeit sicher, dass Programme den Speicher sicher nutzen.

Der Borrow-Checker ist ein entscheidendes Merkmal des Rust-Eigentumsmodells, das strenge Regeln für den Zugriff auf und die Änderung des Speichers durchsetzt.