È a mia conoscenza che quando una variabile il cui tipo implementa Drop
non rientra nell'intervallo, viene inserita una chiamata alla funzione fn drop(&mut self)
e viene passato un riferimento mutabile appena creato alla variabile che non rientra nell'ambito.In che modo una chiamata al destructor chiama `fn drop (& mut self)` quando la variabile proprietaria è immutabile?
Tuttavia, come è possibile nei casi in cui la variabile era immutabilmente legata e sarebbe illegale prenderla in prestito in modo mutabile? Ecco un esempio di cosa sto parlando:
fn main() {
let x = vec![1, 2, 3];
let y = &mut x;
}
che produce il seguente errore: non può prendere in prestito variabile locale immutabile x
come mutabile come previsto.
Qualcosa di simile deve accadere quando x
si interrompe, perché drop
si aspetta un riferimento modificabile.
Si potrebbe dire che il valore è * spostato * nell'argomento di 'drop'. Proprio come puoi spostare 'x' in' z', puoi spostarlo in 'drop' ...? –
@KerrekSB tranne per il fatto che il rilascio prende il suo ricevitore * per riferimento * non * per valore *, quindi nulla viene spostato in 'Drop :: drop'. – Shepmaster
Hm, quindi è più come se fosse stato spostato in una posizione di distruzione privata, da dove viene chiamato 'drop'. –