Ownership
Anzahl Dereferenzierungen
Abschnitt betitelt „Anzahl Dereferenzierungen“Betrachten Sie das folgende Programm, das den Speicherzustand nach der letzten Zeile zeigt:
fn main() {let x = Box::new(0);let y = Box::new(&x);`[]`}Wenn Sie die Zahl 0 über y kopieren möchten, wie viele Dereferenzierungen müssten Sie verwenden?
Geben Sie Ihre Antwort als Ziffer an. Wenn der korrekte Ausdruck beispielsweise *y ist, lautet die Antwort 1.
***y ist der korrekte Ausdruck. y hat den Typ Box<&Box<i32>>. Es ist ein Heap-Zeiger auf eine Stack-Referenz auf einen Heap-Zeiger. Daher muss y dreimal dereferenziert werden, einmal für jede Indirektionsebene.
Ownership und Referenzen
Abschnitt betitelt „Ownership und Referenzen“Betrachten Sie das folgende Programm, das den Speicherzustand nach der letzten Zeile zeigt:
fn get_first(vr: &Vec<i32>) -> i32 { vr[0]}
fn main() { let mut v = vec![0, 1, 2]; let n = get_first(&v); println!("{} {}", n, v[1]);`[]`}Welche der folgenden Aussagen erklärt am besten, warum v nach dem Aufruf von get_first nicht deallokiert wird?
Referenzen sind nicht-besitzende Zeiger. Daher wird durch die Übergabe von &v an get_first die Ownership von v nicht in get_first verschoben, und folglich wird v nach Beendigung von get_first nicht deallokiert.