rust / intermediate
Snippet
Box<T> für Heap-Allokation
Box<T> allokiert Daten auf dem Heap statt auf dem Stack. Verwende es für rekursive Datenstrukturen (wie verkettete Listen), wobei der Compiler eine bekannte Größe benötigt, oder wenn du Heap-Allokations-Semantik willst. Dereferenzierung mit * gibt dir den Wert zurück.
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
fn main() {let boxed_number: Box<i32> = Box::new(42);let unwrapped = *boxed_number;println!("Boxed: {}\nUnwrapped: {}", boxed_number, unwrapped);let boxed_slice: Box<[i32]> = Box::new([1, 2, 3, 4, 5]);println!("Boxed slice length: {}", boxed_slice.len());let mut boxed_vec = Box::new(vec![10, 20, 30]);boxed_vec.push(40);println!("Modified vec: {:?}", boxed_vec);let last = boxed_vec.pop();println!("Popped: {:?}\nVec: {:?}", last, boxed_vec);struct Node<T> {value: T,next: Option<Box<Node<T>>>,}let leaf = Node {value: 42,next: None,};let branch = Node {value: 1,next: Some(Box::new(leaf)),};println!("Linked node value: {}", branch.value);}
Erklärung
1
Box::new(42)
Allokiert i32 auf dem Heap, gibt Box<i32> zurück
2
*boxed_number
Dereferenziert, um den inneren i32-Wert zu erhalten
3
Box<[i32]>
Box mit einem Slice-Typ; Fixed-Size-Array auf dem Heap
4
Box::new(vec![...])
Box kann auch dynamisch große Collections halten
5
Option<Box<Node<T>>>
Rekursive Typen funktionieren nur mit Indirektion über Box