% Drop There is a new edition of the book and this is an old link. > `Drop` lets us customize what happens when a value is about to go out of scope. ```rust struct CustomSmartPointer { data: String, } impl Drop for CustomSmartPointer { fn drop(&mut self) { println!("Dropping CustomSmartPointer with data `{}`!", self.data); } } fn main() { let c = CustomSmartPointer { data: String::from("my stuff") }; let d = CustomSmartPointer { data: String::from("other stuff") }; println!("CustomSmartPointers created."); } ``` --- Here are the relevant sections in the new and old books: * **[in the current edition: Ch 15.03 — The `Drop` Trait Runs Code on Cleanup][2]** * [In the first edition: Ch 3.20 — Drop][1] [1]: https://doc.rust-lang.org/1.30.0/book/first-edition/drop.html [2]: ch15-03-drop.html