Ownership is central to Rust’s memory management model. Every value in Rust has a single owner, and when the owner goes out of scope, the value is automatically deallocated. This eliminates many common memory issues, such as double-free errors and dangling pointers.
fn main() {
let s = String::from("hello"); // s owns the string
takes_ownership(s); // ownership is moved to the function
// println!("{}", s); // Error! s is no longer valid
}
fn takes_ownership(some_string: String) {
println!("{}", some_string);
} // some_string goes out of scope and is deallocated