Rozumiem, że gdy zmienna, której typ implementuje Drop
, wykracza poza zakres, zostaje wywołane wywołanie funkcji fn drop(&mut self)
i przekazuje nowo utworzone zmienne odniesienie do zmiennej wychodzącej poza zakres.W jaki sposób wywoływane jest wywołanie `fn drop (& mut self)`, gdy zmienna posiadająca jest niezmienna?
Jak to jest możliwe w przypadku, gdy zmienna została powiązana w sposób niezmienny, a byłoby to niezgodne z prawem? Oto przykład tego, co mówię:
fn main() {
let x = vec![1, 2, 3];
let y = &mut x;
}
która produkuje następujący błąd: nie może pożyczyć niezmienna zmiennej lokalnej x
jako zmienny, jak oczekiwano.
Coś podobnego musi się zdarzyć, gdy x
zostanie upuszczone, ponieważ drop
oczekuje odwołania do zmiennej.
Można powiedzieć, że wartość jest * przeniesiona * do argumentu 'drop'. Tak jak możesz przenieść 'x' do' z', możesz przenieść go do 'drop' ...? –
@KerrekSB z tą różnicą, że drop przyjmuje swój odbiornik * przez referencję * nie * według wartości *, więc nic nie jest przenoszone do 'Drop :: drop'. – Shepmaster
Hm, więc bardziej przypomina to przeniesienie do prywatnego miejsca zniszczenia, skąd pochodzi 'drop'. –