Cómo obtener el valor poseído de `Box<T>` en Rust sin copiar
¡Hola a todos! Empecé a aprender Rust y me encontré con un problema al trabajar con punteros inteligentes. Tengo una estructura que no implementa el trait `Copy` (por ejemplo, contiene `Vec` o `String`). La coloco en un `Box` para pasarla al heap, pero luego necesito extraer el valor original de vuelta para seguir trabajando con él sin préstamos.
Aquí hay un ejemplo:
```rust
struct Data {
numbers: Vec,
}
fn main() {
let boxed = Box::new(Data { numbers: vec![1, 2, 3] });
// ¿Cómo obtener Data de vuelta ahora para que numbers pase a ser poseído?
// Me gustaría algo como: let data = boxed.into_inner();
// ¡Pero no existe tal método!
}
```
Intenté usar `*boxed` para desreferenciar, pero eso da una referencia, no posesión. Intenté hacer `let data = *boxed;` — el compilador dice que `Data` no implementa `Copy`. Probé bloques unsafe, pero tengo miedo de hacer algo mal. Vi que en algunas discusiones mencionan `Box::into_raw`, pero la documentación me resulta un poco complicada.
P
No answers yet.
Inicia sesión para dejar una respuesta
Blogs