capypad
0 Tage Serie
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
rust
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