O Trait Drop
Valores que implementam Drop
podem especificar o código a ser executado quando saem do escopo:
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"); }
Pontos de discussão:
- Por que
Drop::drop
não recebeself
?- Resposta curta: Se recebesse,
std::mem::drop
seria chamado no final do bloco, resultando em outra chamada paraDrop::drop
ocasionando um estouro de pilha.
- Resposta curta: Se recebesse,
- Tente substituir
drop(a)
pora.drop()
.