Rust fornisce alcuni modi per memorizzare una raccolta di elementi all'interno di una struttura definita dall'utente. La struct può essere assegnato un identificatore di vita personalizzato, e un riferimento a una fetta:Qual è la differenza tra la memorizzazione di un Vec vs un Slice?
struct Foo<'a> {
elements: &'a [i32]
}
impl<'a> Foo<'a> {
fn new(elements: &'a [i32]) -> Foo<'a> {
Foo { elements: elements }
}
}
Oppure può essere dato un oggetto Vec
:
struct Bar {
elements: Vec<i32>
}
impl Bar {
fn new(elements: Vec<i32>) -> Bar {
Bar { elements: elements }
}
}
Quali sono le principali differenze tra questi due approcci?
- L'utilizzo di
Vec
imporrà la lingua per copiare la memoria ogni volta che si chiamaBar::new(vec![1, 2, 3, 4, 5])
? - Il contenuto di
Vec
verrà distrutto in modo implicito quando il proprietarioBar
non sarà più disponibile? - Ci sono pericoli associati al passaggio di una sezione per riferimento se è utilizzata al di fuori della struttura a cui viene passata?
La suddivisione di ciò di cui ogni tipo è composto è molto elucidante. – KChaloux