Avatar ·

Box, ref, & und * in Rust verstehen: Was ist der Unterschied und wie verwendet man sie?

Hallo zusammen! Ich habe vor kurzem angefangen, Rust zu lernen, und bin ständig verwirrt über diese vier Dinge: `Box`, `ref`, `&` und `*`. Ich verstehe, dass sie alle irgendwie mit Zeigern und Referenzen zusammenhängen, aber ich kann nicht erfassen, wann man was verwendet.\n\nZum Beispiel schreibe ich so ein Programm:\n\n```rust\nfn main() {\n let x = 42;\n let y = &x; // Referenz\n let z = Box::new(x); // Box\n println!("{} {}", y, z);\n}\n```\n\nDas funktioniert alles. Aber wenn ich versuche, etwas Komplexeres zu machen, wie Pattern Matching, bricht alles zusammen:\n\n```rust\nfn main() {\n let maybe_number = Some(10);\n match maybe_number {\n Some(ref x) => println!("Erhalten {}", x),\n None => println!("Nichts vorhanden"),\n }\n}\n```\n\nWarum braucht man hier `ref` und nicht einfach `x`? Und worin unterscheidet sich `*` von `&`? Ich habe gelesen, dass `*` eine