Co jest realizacja tej funkcji:Jak uzyskać wartość własności z "Box"?
fn unbox<T>(value: Box<T>) -> T {
// ???
}
Jedyną funkcją w dokumentacji, która wygląda jak to, co chcę jest Box::into_raw
. Następujące będzie sprawdzić:
fn unbox<T>(value: Box<T>) -> T {
*value.into_raw()
}
Daje to błąd error[E0133]: dereference of raw pointer requires unsafe function or block
. Zawijanie go w blok unsafe { ... }
naprawia go.
fn unbox<T>(value: Box<T>) -> T {
unsafe { *value.into_raw() }
}
Czy to jest poprawna realizacja? Jeśli tak, dlaczego nie jest to bezpieczne? Co to znaczy?
Być może to pytanie pokazuje moją ogólną niepewność co do tego, w jaki sposób działa Box
.
Uwaga: w proponowanej implementacji przeciekamy pamięć przydzieloną przez 'Box'. –