El Trait Drop
Los valores que implementan Drop
pueden especificar el código que se ejecutará cuando salgan del ámbito:
struct Droppable { name: &'static str, } impl Drop for Droppable { fn drop(&mut self) { println!("Dropping {}", self.name); } } fn main() { let a = Droppable { name: "a" }; { let b = Droppable { name: "b" }; { let c = Droppable { name: "c" }; let d = Droppable { name: "d" }; println!("Exiting block B"); } println!("Exiting block A"); } drop(a); println!("Exiting main"); }
Cuestiones de debate:
- ¿Por qué
Drop::drop
no aceptaself
?- Respuesta corta: si lo hiciera, se llamaría a
std::mem::drop
al final del bloque, lo que daría como resultado otra llamada aDrop::drop
y un desbordamiento de la stack.
- Respuesta corta: si lo hiciera, se llamaría a
- Prueba a sustituir
drop(a)
pora.drop()
.