rust / intermediate
Snippet
Box<T> für Heap-Allokation und Smart Pointer
Box<T> alloziert Werte auf dem Heap statt auf dem Stack. Es ist der primäre Weg, um singly-linked Datenstrukturen wie Bäume und verkettete Listen in Rust zu erstellen. Box<T> implementiert das Deref-Trait, sodass Sie es wie eine normale Referenz verwenden können. Die Box wird fallengelassen, wenn sie den Gültigkeitsbereich verlässt, und gibt den Heap-Speicher automatisch frei. Box<[T]> erstellt eine dynamisch dimensionierte Slice-Referenz mit bekannter Länge.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::mem;fn main() {let stack_val: i32 = 42;let boxed_val: Box<i32> = Box::new(123);println!("Stack value: {}", stack_val);println!("Boxed value: {}", boxed_val);let boxed_slice: Box<[i32]> = Box::new([1, 2, 3, 4, 5]);println!("Boxed slice len: {}", boxed_slice.len());let mut tree: Option<Box<TreeNode>> = Some(Box::new(TreeNode {value: 1,left: Some(Box::new(TreeNode { value: 2, left: None, right: None })),right: Some(Box::new(TreeNode { value: 3, left: None, right: None })),}));if let Some(ref mut node) = tree {node.value += 10;println!("Root value after modification: {}", node.value);}let size_of_box = mem::size_of::<Box<i32>>();let size_of_i32 = mem::size_of::<i32>();println!("Box<i32> size: {} bytes, i32 size: {} bytes", size_of_box, size_of_i32);}struct TreeNode {value: i32,left: Option<Box<TreeNode>>,right: Option<Box<TreeNode>>,}
Erklärung
1
Box::new(123)
Alloziert Integer 123 auf Heap, gibt Box<i32> zurück
2
Box<[i32]>
Fat Pointer mit Zeiger und Länge für heap-allozierte Slice
3
Option<Box<TreeNode>>
Optionaler geboxter rekursiver Typ für Baumstruktur
4
Some(Box::new(TreeNode { ... }))
Konstruktion des Baums mit geboxten Kindknoten
5
if let Some(ref mut node) = tree { ... }
Musterabgleich zur veränderlichen Ausleihe des Box-Inhalts
6
mem::size_of::<Box<i32>>()
Box-Zeigergröße (8 Bytes auf 64-Bit) vs tatsächliche Datengröße