Rust – Golpe de rasgo

La eliminación de rasgos nos permite personalizar lo que sucede cuando un valor está a punto de quedar fuera del alcance. Los atributos descendentes son importantes para el patrón de puntero inteligente.

La funcionalidad de eliminación de características se usa cuando se implementa un puntero inteligente. Por ejemplo, Box hace Personalice Soltar para asignar el espacio en la pila al que apunta el cuadro.

Se puede usar un atributo de eliminación para borrar valores cuando quedan fuera del alcance.

Sintaxis:

trait Drop {
fn drop(&mut self);
}

Las variables se liberan en el orden inverso al de su creación, por lo que d se elimina antes de c. En Rust, el respaldo se llama automáticamente cuando nuestras instancias quedan fuera del alcance.

Con la ayuda de los ejemplos dados, será fácil entender cómo funciona el método drop:

Ejemplo 1:

Óxido



struct SmartPointer {
 data: String,
}
 
// implementing Drop trait
impl Drop for SmartPointer {
 fn drop(&mut self) {
 println!("Dropping SmartPointer with data `{}`!", self.data);
 }
}
fn main() {
 let _c = SmartPointer { data: String::from("my stuff") };
 let _d = SmartPointer { data: String::from("other stuff") };
 println!("SmartPointers created.");
 }

Salida 1:

SmartPointers created.
Dropping SmartPointer with data `other stuff`!
Dropping SmartPointer with data `my stuff`!

Ejemplo 2:

Óxido



struct New {
 data: String,
}
impl Drop for New {
 fn drop(&mut self) {
 println!("Dropping New with data `{}`!", self.data);
 }
}
fn main() {
 let c = New { data: String::from("some data") };
 println!("New created.");
 drop(c);
 println!("New dropped before the end of main.");
}

Salida 2:

New created.
Dropping New with data `some data`!
New dropped before the end of main.

Soltar un valor temprano con std::mem::drop

La función de soltar std::mem:: no es lo mismo que el método de soltar en el rasgo de soltar. Podemos llamarlo pasando el valor que queremos para bajar el valor antes del final del alcance. En Rust, no podemos llamar manualmente al método drop del rasgo Drop pero tenemos que llamar a la función drop ::mem::std.

Ejemplo:

Óxido



struct GeeksforGeeks  
{  
  a : String,  
}  
impl Drop for GeeksforGeeks  
{  
  fn drop(&mut self)  
  {  
    println!("Dropping the instance of GeeksforGeeks with data : {}", self.a);  
  }  
}  
fn main()  
{  
  let value1 = GeeksforGeeks{a : String::from("This is ")};  
  drop(value1);  
  let _value2 = GeeksforGeeks{a: String::from("GFG Platform")};  
 
}

En el ejemplo anterior, anulamos el método drop(). El compilador de Rust arroja un error que indica que no podemos llamar explícitamente al método drop(). En lugar de llamar explícitamente al método drop(), llamamos a la función std::mem::drop para eliminar el valor antes de que quede fuera del alcance.

Sintaxis de std::mem::soltar La función es diferente de la función drop() definida en el atributo Drop. La función std::mem:: drop incluye el valor pasado como argumento para descartar antes de que quede fuera del alcance.

Producción:

Dropping the instance of GeeksforGeeks with data : This is 
Dropping the instance of GeeksforGeeks with data : GFG Platform

Mis notas personales
flecha_caer_arriba

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *