wenn nicht [eine unowned Ressource] zurückgewonnen werden?
In Rust Hinsicht ein Element ist fallen gelassen, wenn es außerhalb des Gültigkeitsbereichs geht, die oft (aber nicht immer) mit dem Ende eines Blocks entspricht. Wenn es gelöscht wird, werden alle Ressourcen freigegeben, die Teil des Elements sind.
Ressourcen kann Speicher bedeuten, wie im Vektor Beispiel, aber es kann auch mit anderen Dingen wie einem Dateigriff oder einem Schloss entsprechen. Dies wird üblicherweise als Initialisierung der Ressourcenerfassung (RAII) bezeichnet.
einen Programmierer davon überzeugen, dass diese Ressource tatsächlich zurückgewonnen wird?
Sie können nie jemanden überzeugen, der wirklich nicht glauben will^_ ^. Sie können jedoch Drop
selbst zu sehen, implementieren, wenn ein Element gelöscht wird: Das wird die Ausgabe
struct NoisyDrop(u8);
impl Drop for NoisyDrop {
fn drop(&mut self) {
println!("Number {} being dropped", self.0);
}
}
fn main() {
println!("step 1");
let mut nd = NoisyDrop(1);
println!("step 2");
nd = NoisyDrop(2);
println!("step 3");
}
haben
step 1
step 2
Number 1 being dropped
step 3
Number 2 being dropped
Sie können sehen, dass die erste Variable fallen gelassen wird, wenn seine Bindung als Fassung Es gibt keine Möglichkeit mehr, zum NoisyDrop(1)
Wert zu gelangen. Die zweite Variable wird gelöscht, wenn sie aufgrund der Methode endet.
Eigentum Semantik und Lebensdauern
dieses Beispiel vor:
fn main() {
let mut v = vec![1];
v = vec![2];
}
Konzeptionell könnte es als
fn main() {
{
let v = vec![1];
}
{
v = vec![2];
}
}
Und dieses Beispiel
0 geschrieben werden
kann neu geschrieben werden als
fn main() {
{
let v1 = vec![1];
{
let v2 = vec![2];
}
}
}
Diese Umschreibungen zeigen die Lebensdauer jeden Variablen. Immer wenn Sie eine Methode mit einem generischen Lebensdauerparameter aufrufen, wird die Lebensdauer des Blocks der konkrete Wert sein, der für das generische 'a
ersetzt wird.